| 上一篇主題 :: 下一篇主題   | 
	
	
	
		| 發表人 | 
		內容 | 
	
	
		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 文章: 477
 
  第 2 樓
  | 
		
			
				 發表於: 星期二 四月 25, 2006 1:48 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				增加NOFILTER參數試試
 
SELECT * FROM lv_p4pa3 INTO CURSOR lv_p4pa4 NOFILTER
 
(我沒試) | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		garfield Site Admin
  
  註冊時間: 2003-01-30 文章: 2160
 
  第 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 文章: 2160
 
  第 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 文章: 2160
 
  第 7 樓
  | 
		
			
				 發表於: 星期五 四月 28, 2006 5:09 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				可是奇怪了, 我目己在測試的時候是用 DBF ,
 
是沒問題的...
 
只有 VIEW 的檔案才不行吧 ! _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		小賴
 
 
  註冊時間: 2004-12-27 文章: 477
 
  第 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 文章: 477
 
  第 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 文章: 4252 來自: Taipei,Taiwan
  第 12 樓
  | 
		
			
				 發表於: 星期一 五月 01, 2006 5:58 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				可能關鍵在是否VFP會"真的"產生一個實體的臨時檔.
 
 
我猜. _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		小賴
 
 
  註冊時間: 2004-12-27 文章: 477
 
  第 13 樓
  | 
		
			
				 發表於: 星期一 五月 01, 2006 6:47 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				第一次閱讀有關NOFILTER參數是在
 
章立民 中文程式設計---應用實務篇 6.X 
 
PAGE 8-17 看到
 
 
Syntech兄你有這本書, 能不能談談測試結果 ?
 
只有朱兄和Syntech兄回應; 是大家都不會有這個問題 ?
 
還是我反應了一個笨問題 ? | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		DennisTsai
 
 
  註冊時間: 2005-07-26 文章: 178
 
  第 14 樓
  | 
		
			
				 發表於: 星期一 五月 01, 2006 9:41 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				這樣可以吧
 
SELECT * FROM F:\JK\SAL\PLOY INTO CURSOR CURSORA
 
SELECT * FROM DBF() INTO CURSOR CURSORB | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		小賴
 
 
  註冊時間: 2004-12-27 文章: 477
 
  第 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顯然不同 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		 |