FetchDetails的疑問 |
尚未結案
|
WilliamGui
一般會員 發表:5 回覆:4 積分:1 註冊:2005-11-08 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |