有關用ClientDataSet做Master/Detail 的問題 |
答題得分者是:Justmade
|
ivankuo
中階會員 ![]() ![]() ![]() 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
小弟原本是Query1(Master)和Query2(Detail)的兩個ADOQuery來做,
我在測試用
兩個ClientDataSet ClientDataSet1/ClientDataSet2
兩個DataSetProvider DataSetProvider1/DataSetProvider2
兩個DataSource DataSource1/DataSource2 相關設定如下
Query1.SQL.Text:='Select * from a';
Query2.SQL.Text:='Select * from b where F01=:F01'; DataSetProvider1.DataSet:=Query1;
DataSetProvider2.DataSet:=Query2;
ClientDataSet1.ProviderName:=DataSetProvider1;
ClientDataSet2.ProviderName:=DataSetProvider2;
DataSource1.DataSet:=ClientDataSet1;
DataSource2.DataSet:=ClientDataSet2;
Query2.DataSource:=DataSource1; 結果會顯示在兩個DBGrid上,但是當移動Master的DBGrid時候,Detail的DBGrid不會跟著Master變動資料??我的設定有錯誤嗎?? 我如果不用ClientDataSet是可以的,我也試過3-Tier的寫法也是可以
------
ivankuo |
Justmade
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
使用 ClientDataSet Master Detail 應設在 ClientDataSet :
1. Query2 不用輸入 SQL
2. DataSetProvider2 的 的 Options.poAllowCommandText 要設 True
3. ClientDataSet2 的
a) CommandText 設 'Select * from b where F01=:F01'
b) Params 裡的 F01 選好 DataType (如 ftInteger)
c) MasterSources 設 DataSources1
d) MasterField 及 IndexFieldName 設 F01 這樣 DBGrid2 的內容便會隨 DBGrid1 的轉變而變了。
|
ivankuo
中階會員 ![]() ![]() ![]() 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
我是用Delphi 5 前輩~~~我依您的方式去做當我在選擇ClientDataSet的MasterField時會出現錯誤耶~~~
error:The Text,ntext,and image data types cannot be compared or sorted,except when using is null or like operator
我沒有用到這些型態的欄位阿 另外有幾個問題請教
1.這樣就不需要Query2了嗎??
2.DataSetProvider2 的DataSet要設定Query1吧
[/quote]
------
ivankuo |
Justmade
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
參看剛上傳之範例 :
ClientDataSet Master-Detail 簡單範例 (適用於一般/多層程式)
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=33719 你那個錯誤我沒見過但似乎是 F01 的 Field Type 的問題,你看以在 雙按ClientDataSet1 並 Add Field 加入 F01 並看看它是 TXXXXField, 若是Memo / Blob 等就不能這樣做 Key 了。 另外一般來說這還是需要 Query2 的,因為 ClientDataSet 不會自己讀資料而要一般的 DataSet 來幫它讀資料,若果你用 Query1 來讀資料,一開始是沒問題的但若你 ClientDataSet 要 refresh / applyupdate 或 Close 了重開等時便會出錯了,因為 Query1 的 SQL 已變成了 ClientDataSet2 的 CommandText 不可再為 ClientDataSet1 服務了。
|
ivankuo
中階會員 ![]() ![]() ![]() 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |