上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
jackqek
註冊時間: 2006-03-24 文章: 15
第 1 樓
|
發表於: 星期二 四月 25, 2006 12:50 pm 文章主題: cursor 能join嗎? |
|
|
我想請問大家,如下:我先select 出來得到 一筆資料
SELECT * FROM lv_p4pa3 INTO CURSOR lv_p4pa4
再來我要使用這個cursor lv_p4pa4 join 實體的table
SELECT a.p4brch,a.p4ptno
FROM (lv_p4pa4) a LEFT JOIN paflib.papapf b ON a.p4brch+a.p4ptno=b.pabrch+b.paptno INTO CURSOR lv_p4pa5;
結果出現的訊息是找不到 lv_p4pa4,但是我下browse可以跑出資料,
出現的訊息就是找不到,請問是不是我的寫法錯誤,還是cursor不能join
麻煩回答謝謝。 |
|
回頂端 |
|
|
小賴
註冊時間: 2004-12-27 文章: 470
第 2 樓
|
發表於: 星期二 四月 25, 2006 1:48 pm 文章主題: |
|
|
增加NOFILTER參數試試
SELECT * FROM lv_p4pa3 INTO CURSOR lv_p4pa4 NOFILTER
(我沒試) |
|
回頂端 |
|
|
garfield Site Admin
註冊時間: 2003-01-30 文章: 2157
第 3 樓
|
發表於: 星期二 四月 25, 2006 2:04 pm 文章主題: |
|
|
這樣就可以了
SELECT a.p4brch,a.p4ptno
FROM lv_p4pa4 a LEFT JOIN paflib.papapf b ON a.p4brch+a.p4ptno=b.pabrch+b.paptno INTO CURSOR lv_p4pa5
用(lv_p4pa4) 等同用 &lv_p4pa4
lv_p4pa4 是table 名, 不是變數名. _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
|
jackqek
註冊時間: 2006-03-24 文章: 15
第 4 樓
|
發表於: 星期二 四月 25, 2006 4:16 pm 文章主題: |
|
|
SELECT a.p4brch,a.p4ptno
FROM lv_p4pa4 a LEFT JOIN paflib.papapf b ON a.p4brch+a.p4ptno=b.pabrch+b.paptno INTO CURSOR lv_p4pa5
我把它改成上面的,卻出現這個訊息,如圖,
請問要怎麼解決 |
|
回頂端 |
|
|
garfield Site Admin
註冊時間: 2003-01-30 文章: 2157
第 5 樓
|
發表於: 星期二 四月 25, 2006 5:32 pm 文章主題: |
|
|
將 LEFT JOIN paflib.papapf B
改成在 select 前先open database paflib
select .... LEFT JOIN papapf _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
|
jackqek
註冊時間: 2006-03-24 文章: 15
第 6 樓
|
發表於: 星期五 四月 28, 2006 3:51 pm 文章主題: |
|
|
原來是實體table不能join cursor,已換別種方式寫 |
|
回頂端 |
|
|
garfield Site Admin
註冊時間: 2003-01-30 文章: 2157
第 7 樓
|
發表於: 星期五 四月 28, 2006 5:09 pm 文章主題: |
|
|
可是奇怪了, 我目己在測試的時候是用 DBF ,
是沒問題的...
只有 VIEW 的檔案才不行吧 ! _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
|
小賴
註冊時間: 2004-12-27 文章: 470
第 8 樓
|
發表於: 星期五 四月 28, 2006 6:24 pm 文章主題: |
|
|
記憶中由 SELECT .... INTO Cursor CurTest 創建的 CurTest是不
能作為下一個SELECT ....的資料源(SELECT的資料源好像只能是實體表)
最後面的附註是Help8.0 Sql Command 備註說明的內容(英文版同), 請注意:
”可以使用 NOFILTER 來創建一個可用於後來的查詢的游標。”這句話
Help9.0也有提到NOFILTER參數但卻少了以上這句話
我自已在使用也同Help8.0說的一樣
"SELECT 建立的Cursor無法作為下一SELECT 的資料源"
例如
SELECT * FROM TableA INTO CursorB
SELECT * FROM CursorB .... 會有問題
但如果是
SELECT * FROM TableA INTO CursorB NOFILTER
SELECT * FROM CursorB ... 則無問題
個人還發現 不用NOFILTER改用ReadWrite也無問題
SELECT * FROM TableA INTO CursorB READWRITE
SELECT * FROM CursorB ... 也無問題
應該是因為ReadWrite, NoFilter都會先建立臨時表, 而這也須
拿速度作為補償
曾有人告訴我不用NOFILTER, READWRITE ; 但我測試都一定
要加NOFILTER才可, 利用這機會也請各位先進幫我指點迷津,
測試結果煩請告知, 先行感謝 !
Help8.0片斷內容
當在 Destination 參數中使用 CURSOR 子句時, 你現在可以使用 NOFILTER 來創建一個可用於後來的查詢的游標。在早期版本的 Visual FoxPro 中, 你需要包括一個額外的常數或表達式作為篩選。例如, 添加一個邏輯 true 作為篩選表達式來創建一個可用於後來的查詢的查詢:
SELECT *, .T. FROM customers INTO CURSOR myquery
但是, 包括 NOFILTER 會降低查詢性能因為要在磁盤上創建一個臨時表。臨時表在游標關閉時從磁盤上刪除。 |
|
回頂端 |
|
|
朱育興
註冊時間: 2003-08-25 文章: 661 來自: 台中市大里區
第 9 樓
|
發表於: 星期六 四月 29, 2006 8:20 pm 文章主題: |
|
|
小賴 寫到: | SELECT * FROM TableA INTO CursorB
SELECT * FROM CursorB .... 會有問題 |
這個
SELECT * FROM TableA INTO CursorB
我都是用
SELECT * FROM TableA INTO CURSOR CursorB
然後
SELECT * FROM CursorB .... 都不會有問題
因為一直以來都是這樣用的 _________________ 希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ |
|
回頂端 |
|
|
小賴
註冊時間: 2004-12-27 文章: 470
第 10 樓
|
發表於: 星期一 五月 01, 2006 10:18 am 文章主題: |
|
|
TO 朱兄:
對不起; 以上我是少打了 "Cursor"
應該是 SELECT * FROM TableA INTO CURSOR CursorB
剛剛在Command Window試了一下; 還是有問題
SELECT * FROM F:\JK\SAL\PLOY INTO CURSOR CURSORA (OK)
SELECT * FROM CURSORA INTO CURSOR CURSORB (出現以下錯誤訊息)
"CursorA" must be Created With "Select .....INTO Table"
改成
SELECT * FROM F:\JK\SAL\PLOY INTO CURSOR CURSORA NOFILTER
SELECT * FROM CURSORA INTO CURSOR CURSORB
就可以 ; 是不是我的VFP9設定有問題 ? |
|
回頂端 |
|
|
朱育興
註冊時間: 2003-08-25 文章: 661 來自: 台中市大里區
第 11 樓
|
發表於: 星期一 五月 01, 2006 5:06 pm 文章主題: |
|
|
小賴 寫到: | TO 朱兄:
對不起; 以上我是少打了 "Cursor"
應該是 SELECT * FROM TableA INTO CURSOR CursorB
剛剛在Command Window試了一下; 還是有問題
SELECT * FROM F:\JK\SAL\PLOY INTO CURSOR CURSORA (OK)
SELECT * FROM CURSORA INTO CURSOR CURSORB (出現以下錯誤訊息)
"CursorA" must be Created With "Select .....INTO Table"
改成
SELECT * FROM F:\JK\SAL\PLOY INTO CURSOR CURSORA NOFILTER
SELECT * FROM CURSORA INTO CURSOR CURSORB
就可以 ; 是不是我的VFP9設定有問題 ? |
您對我錯
不過我搜了我公司的程式碼,確實有找找到我那種寫法,所以我也很懷疑會何沒出錯,可能等有空再找它測試。 _________________ 希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 12 樓
|
發表於: 星期一 五月 01, 2006 5:58 pm 文章主題: |
|
|
可能關鍵在是否VFP會"真的"產生一個實體的臨時檔.
我猜. _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
小賴
註冊時間: 2004-12-27 文章: 470
第 13 樓
|
發表於: 星期一 五月 01, 2006 6:47 pm 文章主題: |
|
|
第一次閱讀有關NOFILTER參數是在
章立民 中文程式設計---應用實務篇 6.X
PAGE 8-17 看到
Syntech兄你有這本書, 能不能談談測試結果 ?
只有朱兄和Syntech兄回應; 是大家都不會有這個問題 ?
還是我反應了一個笨問題 ? |
|
回頂端 |
|
|
DennisTsai
註冊時間: 2005-07-26 文章: 176
第 14 樓
|
發表於: 星期一 五月 01, 2006 9:41 pm 文章主題: |
|
|
這樣可以吧
SELECT * FROM F:\JK\SAL\PLOY INTO CURSOR CURSORA
SELECT * FROM DBF() INTO CURSOR CURSORB |
|
回頂端 |
|
|
小賴
註冊時間: 2004-12-27 文章: 470
第 15 樓
|
發表於: 星期一 五月 01, 2006 10:26 pm 文章主題: |
|
|
DennisTsai 寫到: | 這樣可以吧
SELECT * FROM F:\JK\SAL\PLOY INTO CURSOR CURSORA
SELECT * FROM DBF() INTO CURSOR CURSORB |
不一樣哦 !
SELECT NO1, DepNo, DepName FROM F:\JK\ASL\PLOY ;
WHERE DepNo = "41 INTO CURSOR CursorA
? DBF() && F:\JK\SAL\PLOY
SELECT * FROM DBF()
第二個SELECT將取回F:\JK\SAL\PLOY所有欄位, 所有記錄;
內容與CursorA顯然不同 |
|
回頂端 |
|
|
|