 |
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 文章: 476
第 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 文章: 4249 來自: 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 文章: 4249 來自: 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 文章: 476
第 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 文章: 563 來自: 臺灣
第 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 文章: 4249 來自: 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也有備份,所以都能快速解決 _________________ 各取所需 各盡所能 |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|