加分求解,类似ClientDataSet.FetchDetails、ClientDataSet.FetchBlobs的问题,有点难 (300分)

  • 主题发起人 主题发起人 hyhy
  • 开始时间 开始时间
H

hyhy

Unregistered / Unconfirmed
GUEST, unregistred user!
1.主子表程序,在设计程序时,由于有要求,数据取完之后立即断开连接,类似WebService,所以使用此方法取数据:
GetData(const SQLstr:string;out vdata:Olevariant);
其中:SQLstr为查询语法,
vData为返回数据。
中间层用ClientDataSet+DataSetProvider+SQLquery实现,由于要保证速度,在中间层的DataSetProvider中把[Options]poFetchDetailsOnDemand、poFetchBlobsOnDemand等相关的属性都置成了True,所以在开始时子表数据和Blob数据都没有取,在客户端需要例如滚动时才去取,这时候由于不是直接Midas连接,已经不能直接调用ClientDataSet.FetchDetails、ClientDataSet.FetchBlobs等方法了,请问如何用其他的方法实现ClientDataSet.FetchDetails、ClientDataSet.FetchBlobs一样的功能?
2.在这种情况下,更新数据我又采用了
UpdateData(Const Delta:OleVariant;out errData:OleVariant);
其中:Delta为ClientDataSet的Delta,
errData为返回的没有更新成功的记录
这个方法如何实现?
errData返回后如何将客户端的Delta更换,以节省下次修改更新提交的数据量?
该问题累计共400分,另外100分在
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2566141
大富翁怎么没有修改给分的方法。
这几个问题可能困扰了很多程序员,如果能够解决相信会对大家都有很大的帮助,希望大家踊跃回答,能答一个算一个。
 
学习学习
 
看不懂意思!
 
我以为,使用返回Variant数组的方法比较好
曾经观察到out参数引起服务端内存泄漏的情况
对于这种使用ClientDataSet又要求松联接的情况
从TClientDataSet派生一个类,override post,并记录查询时执行的sql也是一种方法
服务的UpdateData中重新做一次查询,用传入的delta更新数据,传回data
让客户端的clientdataset和服务端保持数据同步,例如:
procedure TMYClientDataSet.Post;
var
V,V2:OleVariant;
begin
inherited;
if (_stmt<>'') and(ChangeCount>0) then
begin
V:=VarArrayCreate([0,1],varVariant);
V[0]:=_stmt;
V[1]:=Delta;
V2:=svr.UpdateData(V);
Data:=V2[0];
end;
end;

这样屏蔽clientdataset和中间层的连接方式
ClientDataSet.FetchDetails、ClientDataSet.FetchBlobs等可以采用类似方法
 
登记一下,相关URL:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2566141
 
后退
顶部