Master-Detail 中 Detail 資料的排序 |
|
xgray
一般會員 發表:12 回覆:14 積分:10 註冊:2002-04-14 發送簡訊給我 |
我是使用 Paradox,我用兩個 TTable 做 Master-Detail,在 Detail 資料表中中有 PK、FK,Primary Index 是內定的 PK,Secondary Index 是 FK,另一個 Secondary Index 是 FieldTwo,我現在所找出來的 Detail 資料的排序欄位是 FK 那個欄位,我想要讓它用 FieldTwo 去 Order,所以我將 Detail TTable 的 IndexName 在執行過程中設為 FieldTwo 的 Index,可是這樣卻讓我的 Detail 資料跑不出來。
是因為 Detail 中的資料 Order 一定得照 FK 的那個 Index 嗎?還是有其它的方法可以讓我的 Detail 的資料照我想要的某個欄位去排序呢?因為我的 Master 和 Detail 的資料是查詢之後的暫存資料檔,所以想要在資料全部新增後再去排序,如果不行的話,看來就得在新增前先將資料排好了,不知各位前輩們可否指點一下.....謝謝!!
|
xgray
一般會員 發表:12 回覆:14 積分:10 註冊:2002-04-14 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 唉,來個自問自答吧,如果 Deatil 是用 TTable 的話,其排序方式一定是用 Forgien Key,參考自 Huanlin's Delphi Page....看來我得另想辦法了....個人覺得Delphi內附的Master Detail自動關聯做得很沒有效率,速度很慢,彈性又小,最好拆掉Master與Detail的DataSource關聯,寫在Master TAble的OnScroll事件中去Open Detail的Table(用TQuery),就可以下Order by自由定義排序,我試過如此做在SQL級資料庫的還境下反而更快,在Paradox下速度也還可以! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
xgray
一般會員 發表:12 回覆:14 積分:10 註冊:2002-04-14 發送簡訊給我 |
引言: 個人覺得Delphi內附的Master Detail自動關聯做得很沒有效率,速度很慢,彈性又小,最好拆掉Master與Detail的DataSource關聯,寫在Master TAble的OnScroll事件中去Open Detail的Table(用TQuery),就可以下Order by自由定義排序,我試過如此做在SQL級資料庫的還境下反而更快,在Paradox下速度也還可以! ~~~Delphi K.Top討論區站長~~~嗯,謝謝站長提供的另一個方法,我會試看看的......... |
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
我的作法是使用 TQuery 來做 Master-Detail
假設 Master Table 的欄位如下:
No varchar(4) Name varchar(40)Detail Table 的欄位如下: No varchar(4) ItemNo varchar(2) ProdNo varchar(4) Qty float Price floatQueryMaster 的 SQL 敘述如下:SELECT * FROM MasterTable QueryDetail 的 SQL 敘述如下:SELECT * FROM DetailTable WHERE No=:No ORDER BY ItemNo 請注意紅色部分,因為參數名稱 No 與 Master Table 中的 No 欄位名稱相同所以在 QueryMaster 捲動時,就會自動將 No 欄位的值帶入 No 參數中 加油喔,喵~
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
Kimmy
一般會員 發表:10 回覆:17 積分:5 註冊:2002-05-31 發送簡訊給我 |
引言: 請注意紅色部分,因為參數名稱 No 與 Master Table 中的 No 欄位名稱相同所以在 QueryMaster 捲動時,就會自動將 No 欄位的值帶入 No 參數中自動將 No 欄位的值帶入 No 參數中...可是我寫時不會自動帶入呢... 那請問一下是不是要在QueryMaster 捲動時寫入detail.ParamByName('NO').AsString:=master.FieldByName('NO').AsString;嗎,是要在寫在AfterScroll還是BeforeScroll呢..... delphi菜鳥留 發表人 - KIMMY 於 2002/07/04 10:58:36 |
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
引言:只要將detail的daasource設向maser就可.......... @@~~飛翔在天際的精靈~~@@ 發表人 - andersonhsieh 於 2002/07/04 12:57:22引言: 請注意紅色部分,因為參數名稱 No 與 Master Table 中的 No 欄位名稱相同所以在 QueryMaster 捲動時,就會自動將 No 欄位的值帶入 No 參數中自動將 No 欄位的值帶入 No 參數中...可是我寫時不會自動帶入呢... 那請問一下是不是要在QueryMaster 捲動時寫入detail.ParamByName('NO').AsString:=master.FieldByName('NO').AsString;嗎,是要在寫在AfterScroll還是BeforeScroll呢..... delphi菜鳥留 發表人 - KIMMY 於 2002/07/04 10:58:36
------
@@~~飛翔在天際的精靈~~@@ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |