我创建了一个函数,将数据从A TClientDataSet复制到B。
在生产中,代码将动态填充一个TClientDataSet,如下所示:
procedure LoadClientDataSet(const StringSql: String; ParamsAsArray: array of Variant; CdsToLoad: TClientDataSet);
begin
//There is a shared TClientDataSet that retrieves
//all data from a TRemoteDataModule in here.
//the following variables (and code) are here only to demonstration of the algorithm;
GlobalMainThreadVariable.SharedClientDataSet.CommandText := StringSql;
//Handle Parameters
GlobalMainThreadVariable.SharedClientDataSet.Open;
CdsToLoad.Data:= GlobalMainThreadVariable.SharedClientDataSet.Data;
GlobalMainThreadVariable.SharedClientDataSet.Close;
end; 尽管如此:
发布于 2014-03-14 12:46:45
数据属性后面的数据存储被引用计数。因此,您不必费心地释放它。
如果您想深入研究TClientDataSet的本质,我建议您阅读凯里·詹森( Cary Jensen:深度德尔菲: ClientDataSets )那本非常优秀的书。
发布于 2014-03-17 11:04:31
通过像您所做的那样分配Data属性来复制记录。现在您有两个不同的TClientDataset同义词,它们有两个不同的记录集,它们的结构完全相同,行数相同,字段值相同。
如果接收TClientDataset没有以前定义的任何字段结构,或者现有结构与正在分配的Data兼容,那么这样做是安全的。然而,如果我们谈论的是大量的记录,作业可能需要很长的时间,在极端的情况下,它可能会破坏计算机的内存(这一切都取决于计算机的配置)。
为了释放数据,只需关闭数据集即可。
如果您希望拥有两个TClientDataset实例,而不是一个记录实例,我的建议是使用TClientDataset.CloneCursor方法,而不是复制数据,只需在不同的数据集中分配一个引用即可。在这种情况下,在两个不同的数据集中共享的数据是完全相同的。
https://stackoverflow.com/questions/22404948
复制相似问题