全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1561
推到 Plurk!
推到 Facebook!

有關用ClientDataSet做Master/Detail 的問題

答題得分者是:Justmade
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-09 15:28:09 IP:61.221.xxx.xxx 未訂閱
小弟原本是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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-09 16:05:04 IP:218.16.xxx.xxx 未訂閱
使用 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-09 16:43:58 IP:61.221.xxx.xxx 未訂閱
我是用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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-09 17:24:52 IP:218.16.xxx.xxx 未訂閱
參看剛上傳之範例 : 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-10 14:23:59 IP:61.221.xxx.xxx 未訂閱
前輩可以了~~~感謝~~
------
ivankuo
系統時間:2024-06-27 16:15:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!