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

FetchDetails的疑問

尚未結案
WilliamGui
一般會員


發表:5
回覆:4
積分:1
註冊:2005-11-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-08 20:03:44 IP:61.141.xxx.xxx 訂閱
FetchDetails的疑問 小弟第一次登壇提問,還望各位前輩多多指點。 問題是關於ClientDataSet的FetchDetails的疑問。開發環境: Win2k專業版 Delphi7 Patch1 Database Update ADO Provider ClientDataSet都在本地設置關聯,即多層當兩層用, TADODataSet設置為用戶端靜態游標,打開視窗時打開資料集; TProvider的Options=[poFetchDetailsOnDemand, poCas…..],ReosleToDataSet=True, WhereKey方式; ClientDataSet的FetchOnDemand設置為False; 細節上我就不多說了; 取資料上,用戶打開本月主表資料流覽,當用戶想查看對應的從表資料時,再發出FetchDetails方法,不過,經過跟蹤Delphi的VCL發現,如果ClientDataSet中有三個資料集欄位(TDataSetField),就會向資料庫伺服器發出3*3 1*3次select從表的SQL語句,這不是我想要的!我只需要它發出3條select命令就行了。 本來多層的目的就是少量多次的取數,實現起來也不太麻煩,只是為什麼Delphi要這樣呢?雖然現在其他的增刪改都正常。 以下是Delphi的VCL代碼: ------------------ Unit Provider procedure TUpdateTree.RefreshData(Options: TFetchOptions); …… if (Field is TDataSetField) then //如果是… begin if not Updated then FResolver.Provider.LocateRecord(Source, Delta); //定位主表記錄並取數…最終執行了TADODataSet.Resync方法 Tree := GetTree(Field.FieldName); if Assigned(Tree) then begin if not VarIsNull(Field.NewValue) then begin if Tree.Delta.RecordCount > 0 then Tree.RefreshData(Options); end else FResolver.Provider.FetchDetails(Tree.Source, Tree.Delta); end; end; ……
WilliamGui
一般會員


發表:5
回覆:4
積分:1
註冊:2005-11-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-09 13:18:38 IP:61.141.xxx.xxx 訂閱
这样做法,我又发现一问题, 新增,更改都很正常,但删除,left join出来的数据时, 会分别发出多条delete SQL语句删除多个表,My God! 难道还要我 写上 ADO.Items['Uqiue Table']:='xxx';吗? 想不明白,为什么Delphi这么初级的应用,要这么麻烦。
系統時間:2024-04-19 15:58:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!