慎用TClientDataset.Data

来源:互联网 发布:淘宝限时打折收费 编辑:程序博客网 时间:2024/05/21 22:48

慎用TClientDataset.Data

 

有时候考虑到效率的原因,直接使用data来复制数据。但是有一点要注意:

追踪delphi的源码,发现

TclientdatasetOpen的时候,会先判断一个内部的字段FSavedPacket: TDataPacket. If FSavedPacket <> nil then DoGetRecords()

而当我们调用cdsxxx.data := anyData,它会把值赋给FSavedPacket所以此时FSavedPacket已经<>nil了,而且从源码上看,TClientDatasetclose的时候并没有把FSavedPacket清掉。所以下次Open的时候,其实这个Open是不会去取数据的,也就是没有效果的。

 

解决这个问题的办法是自己派生一个新的ClientDataset

 

TMyClientDataSet = class(TClientDataset)

protected

   procedure CloseCursor; override;

...

 

 

TMyClientDataSet.CloseCursor;

begin

  inherited CloseCursor;

  Data := null; //此处清空FSavedPacket

end;

原创粉丝点击