  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		tigerlee39y
 
 
  註冊時間: 2007-11-26 文章: 132 來自: taipei
  第 1 樓
  | 
		
			
				 發表於: 星期日 六月 08, 2008 7:30 pm    文章主題: 在父與子的聯結狀態下,子檔案的排序能否以其它的key排序?(已解決) | 
				     | 
			 
			
				
  | 
			 
			
				大家都知到,父子檔的聯結,是父檔的排序key是"主鍵值",子檔的排序key是"一般索引"
 
在兩個檔案連結的狀況下,子檔案的排序能否以其它的key排序顯示?
 
譬如:
 
mst.dbf排序主鍵值是prod_no欄
 
slave.dbf排序是一般索引prod_no欄
 
在資料庫中也設了關聯性聯結
 
 
在父子檔各開一個grid之下,子檔的顯示希望以另一個排序方式(如:prod_nm)顯示
 
 
我在form的資料環境中子檔的cursor看到有order的選項,也設定另一個排序(以prod_nm)
 
但是並未發生作用,prod_nm的資料顯示仍然是無次序的
 
 
請教各位高手 ! _________________ 各取所需 各盡所能
   tigerlee39y 在 星期五 六月 27, 2008 10:10 pm 作了第 1 次修改 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		garfield Site Admin
  
  註冊時間: 2003-01-30 文章: 2160
 
  第 2 樓
  | 
		
			
				 發表於: 星期一 六月 09, 2008 9:38 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				方法1
 
子檔案的索引key 改用  關聯父檔+你所想要排序的欄位
 
 
方法2
 
不要用 關聯性聯結  , 改用 select * from 子檔 where 子檔.key=父檔.key order by 排序欄位 into cursor 暫存檔 _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		tigerlee39y
 
 
  註冊時間: 2007-11-26 文章: 132 來自: taipei
  第 3 樓
  | 
		
			
				 發表於: 星期一 六月 09, 2008 12:12 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				謝謝 Garfield
 
照你的方法實驗結果如下:
 
方法1不能用,子檔案的索引key 改用 關聯父檔+你所想要排序的欄位後,父與子檔就聯結不到了
 
 
方法2跟我狀況也不合,因為子檔還要作新增, 編輯,刪除等動作,如果對select出來的cursor或暫存檔去作這些動作
 
當要寫回倒本檔(子檔)複雜度增加很大
 
下次寫時要來試試看方法2,新增,編輯還好作,刪除比較麻煩,不過這也不失一種方式
 
 
謝謝 ! _________________ 各取所需 各盡所能 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		garfield Site Admin
  
  註冊時間: 2003-01-30 文章: 2160
 
  第 4 樓
  | 
		
			
				 發表於: 星期一 六月 09, 2008 12:58 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				使用方法1時, 請搭配 SET EXACT Off _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		小賴
 
 
  註冊時間: 2004-12-27 文章: 477
 
  第 5 樓
  | 
		
			
				 發表於: 星期一 六月 09, 2008 3:07 pm    文章主題: Re: 在父與子的聯結狀態下,子檔案的排序能否以其它的key排序? | 
				     | 
			 
			
				
  | 
			 
			
				 	  | tigerlee39y 寫到: | 	 		  大家都知到,父子檔的聯結,是父檔的排序key是"主鍵值",子檔的排序key是"一般索引"
 
請教各位高手 ! | 	  
 
 
clipper 時代 set relation 一向是我的最愛 ...
 
使用 VFP 後就少用了 ; 因為相關文章(含Help)提及之用法與我認知的差異很大.
 
有二點疑問順便在此提出 ; 是否有人能為小弟証實 :
 
1. 所謂父檔是否需要建立相關的索引 ..
 
2. 父檔與子檔之欄位名稱需要一致嗎 ?
 
 
以上二點小弟研究結論都是否定的 ...
 
 
父檔不但不需建立索引 ; 基本上與子檔一點關聯都沒有 ; 唯一有關系的是 :
 
父檔之指標移動時, 子檔之指標必需作移動的動作 ; 致於移到那裡 ; 與子檔索
 
引鍵值有關, 但不一定與父檔有任何關聯 ; 以下用簡單例子說明 :
 
SELECT 0
 
USE Other   & 第三者
 
SELECT 0
 
USE Children && 子檔
 
INDEX ON NO TAG NO
 
SELECT 0
 
USE Father  && 父檔
 
SET RELATIO TO ?????? INTO Children
 
以上 ????? 可以跟父檔一點關係都沒有, 它只是一個運算式, 子檔就根據其值
 
將指標移至有相同索引鍵值之第一筆資料 ; 例如 :
 
SET RELATION TO "0004" INTO Children
 
這樣不管父檔如何移動, 子檔指標都一直停在 NO = "0004" 的筆數 ..
 
 
SELECT Father
 
SET RELATION TO Other.IDNO INTO Children
 
 
這樣的指令看起來又更離譜了 ....
 
明明是 Father 與 Children 建立關聯, 可是Children之移動卻與Father一點
 
關聯都沒有, 反而是根據Other.IDNo值在作移動, 只是Other移動時Children
 
並不移動, Father移動時Children才動, 但是根據Other.IDNo值作移動
 
 
所以小弟的結論是 :
 
SET RELATION TO KeyExpress INTO ....
 
所建立的關聯, 唯一的"關聯"只在於父檔移動時子檔須就KeyExpress之值與子檔
 
作用索引鍵值作適當的移動, 其實與父檔是沒關聯的, 當然KeyExpress運算式
 
如果含有父檔的欄位, 就會與父檔有關係.
 
 
以上只是小弟個人研究所得(從 Clipper至今) ; 只因與VFP相關說明差異很大 ;
 
所以於VFP小弟是不用的, 在此提出望有心人能抽空測試, 並提出結論檢討.... | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 6 樓
  | 
		
			
				 發表於: 星期一 六月 09, 2008 4:23 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				1. 好像也是不用有相對應的parent table 的索引
 
2. 欄位名稱不用一樣,甚至可以用 f1+f2+f3 的方式組合.
 
 
所以安全的作法就是兩邊都建index,relation 的keyexpress 盡量與 index 欄位相符.
 
 
基本我是這樣用,
 
參數不可不在"定義域"裡,就通常可以避免函數結果不會落在"值域"!!   ^_^;;;     
 
 
如果參數不在"定義域"裡,那函數結果出現在哪裡都不會感到意外.  XD
 
再精明的人在寫函數的時候都可能把boundary condition搞錯. _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 7 樓
  | 
		
			
				 發表於: 星期一 六月 09, 2008 4:44 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				實驗結果 (vfp 6 sp5)
 
 
如果 child table 沒有指定"正確"的index ,
 
當parent table 移動記錄指標時, child table 會變成 eof.
 
 
當child table 沒有指定任何index 時,
 
當parent table 移動記錄指標時, child table 甚至會出現錯誤,或根本不移動記錄指標.
 
 
資料環境會出現什麼情況?
 
我不敢用,所以不知道.
 
以上測試是使用vfp 命令視窗做的. _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		小賴
 
 
  註冊時間: 2004-12-27 文章: 477
 
  第 8 樓
  | 
		
			
				 發表於: 星期一 六月 09, 2008 5:37 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				所以一開始我就說與子檔索引鍵值有關 ;當然子檔必須建立索引
 
SET RELATION TO "運算式" INTO 子檔
 
子檔的移動是根據: (運算式) 的結果 = 索引鍵值來決定的
 
致於運算式可以與父檔沒關係, 甚至可以是其他Table的欄位組合
 
 
簡單的說:
 
你使用SET RELATION TO eExpress INTO 子檔
 
當父檔有移動指標 ; 系統就幫我們觸發某一事件 ;
 
(我不知觸發什麼事件), 而這事件的內容就是
 
SEEK eExpress IN 子檔
 
所以子檔需建索引是顯而易見的 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		tigerlee39y
 
 
  註冊時間: 2007-11-26 文章: 132 來自: taipei
  第 9 樓
  | 
		
			
				 發表於: 星期一 六月 09, 2008 9:00 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				實驗結果報告:
 
  根據GARFIELD的方法1來設定子檔的索引A01+A02(父檔還是A01),同時也設了EXACT OFF
 
  結果可行,父檔移動時,子檔顯示的資料KEY均與父檔相同,同時也按照A02欄位排序
 
  新增或編輯子檔,有動到KEY的資料也顯示在正確的位置
 
*----------------------------------------------
 
以前用CLIPPER時,SET RELATION也常用,子檔的資料要寫不少副程式處理
 
但是在VFP之下也很好用,原因:
 
1.在資料庫的地方設定父子關係時用滑鼠DRUG兩個索引很方便,設過後建FORM時只要在資料環境加入TABLE就自動設好
 
  RELATION(我都沒有用命令式的set rela to xxx into yyy)
 
2.在資料庫的地方設定父子關係時,還可設定父檔KEY值更動,子檔自動更動
 
3.父檔該筆資料被刪除,子檔跟著刪除
 
 
這些自動的動作省寫了許多行程式
 
 
另外我想父檔之所以要設主鍵值的原因是主鍵值設定後資料的KEY欄是不允許"重複",這樣也避免了一堆子資料被好幾筆父檔聯結,對於像銷貨單或會計傳票...等一對多的設計是不允許的
 
 
當然也有些缺點, 像三層的RELATION,祖父,父,子設起來就蠻麻煩的,不知各位是如何處理,我是設了一個KEY檔來處理第2層與第3層的RELATION
 
 
總之謝謝各位,既解決問題又可思想上的啟發 _________________ 各取所需 各盡所能 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		jtcom01
 
 
  註冊時間: 2005-07-29 文章: 413
 
  第 10 樓
  | 
		
			
				 發表於: 星期五 六月 20, 2008 12:18 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				在vfp6.0測試..
 
父擋開索引NO,子檔開索引 NO+ANYKEY,SET RELATION TO NO INTO 子檔 
 
結果父檔移動子檔並沒跟著移動.. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		nelsonchuang
 
 
  註冊時間: 2003-09-04 文章: 564 來自: 臺灣
  第 11 樓
  | 
		
			
				 發表於: 星期五 六月 20, 2008 1:20 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				那是你的條件有問題,跟vfp多少版無關
 
Set relation 其實在操作表格上,有很快速的優勢
 
如果你的資料是放在dbf上,那就真的得好好的用他
 
因為他可以用一對多的方式關連
 
父表格對子表格,
 
父表格一筆資料可以指向一個子表格的多筆資料
 
這是以前必須用Set Filter才辦得到的事情.
 
又快又方便,又不用下Sql指令. _________________ 大家好,請多指教 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		tigerlee39y
 
 
  註冊時間: 2007-11-26 文章: 132 來自: taipei
  第 12 樓
  | 
		
			
				 發表於: 星期一 六月 23, 2008 6:22 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				jtcom01兄
 
我不是用set rela命令來作2者之間的聯結
 
我是在資料庫中drug二者的索引檔來作聯結的
 
這樣的好處除了父子的聯結外,還有好處是可以設定父檔key值更改,子檔亦會更改,父檔刪除,子檔跟著刪除 _________________ 各取所需 各盡所能 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 13 樓
  | 
		
			
				 發表於: 星期一 六月 23, 2008 8:21 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				tigerlee39y 兄:
 
當你某日資料庫毀損時,就知道這個方法哪裡不好了.  Orz _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		tigerlee39y
 
 
  註冊時間: 2007-11-26 文章: 132 來自: taipei
  第 14 樓
  | 
		
			
				 發表於: 星期四 六月 26, 2008 8:44 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				當然我也怕資料庫毀損,不過問題不大
 
1.完整的系統備份一次
 
2.每日備份dbf
 
 
當資料庫毀損時只要處裡:
 
1.系統抄回
 
2.備份dbf抄回,完全ok
 
 
我覺得vfp在windows之下,比以前dos之下穩定很多,我們公司系統執行5 6年,並未發生慘劇,我們是用win2000 ntfs
 
硬碟到是壞過,但整個windows也有備份,所以都能快速解決 _________________ 各取所需 各盡所能 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |