VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

在父與子的聯結狀態下,子檔案的排序能否以其它的key排序?(已解決)

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
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. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
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. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
小賴



註冊時間: 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. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
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也有備份,所以都能快速解決

_________________
各取所需 各盡所能
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作