Delphi 关于TClientDataSet中的数据
我创建了一个函数,将数据从TClientDataSet复制到B 在生产中,代码将动态填充TClientDataSet,如下所示:Delphi 关于TClientDataSet中的数据,delphi,dataset,memory-safety,Delphi,Dataset,Memory Safety,我创建了一个函数,将数据从TClientDataSet复制到B 在生产中,代码将动态填充TClientDataSet,如下所示: procedure LoadClientDataSet(const StringSql: String; ParamsAsArray: array of Variant; CdsToLoad: TClientDataSet); begin //There is a shared TClientDataSet that retrieves //all data
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;
也就是说:
- 这样做安全吗?(我所说的安全是指,我应该期待什么样的例外以及如何处理它们?)
- 如何释放“.Data”内存
如果您想深入了解TClientDataSet的本质,我建议您阅读Cary Jensen的一本非常优秀的书:数据属性后面的数据存储是引用计数的。因此,您不必费心发布它
如果您想深入了解TClientDataSet的本质,我建议您阅读Cary Jensen的一本非常优秀的书:数据属性后面的数据存储是引用计数的。因此,您不必费心发布它
如果您想深入了解TClientDataSet的本质,我建议您阅读Cary Jensen的一本非常优秀的书:数据属性后面的数据存储是引用计数的。因此,您不必费心发布它
如果您想深入了解TClientDataSet的本质,我建议您阅读Cary Jensen的一本非常优秀的书:,方法是像复制记录一样指定
数据属性。现在,您有了两个不同的ISNTance ofTClientDataset
,两组不同的记录具有完全相同的结构、相同的行数和相同的字段值
如果接收的TClientDataset
没有先前定义的任何字段结构,或者现有结构与分配的数据兼容,那么这样做是安全的。然而,如果我们谈论的是大量的记录,那么分配可能需要很长时间,在极端情况下,它可能会占用计算机的内存(这完全取决于计算机的配置)
为了释放数据,只需关闭数据集
如果您希望有两个TClientDataset
实例,但只有一个记录实例,我的建议是使用该方法,即不复制数据,只在不同的数据集中为其分配一个引用。在这种情况下,两个不同的数据集之间共享的是相同的数据。通过像复制记录一样分配Data
属性。现在,您有了两个不同的ISNTance ofTClientDataset
,两组不同的记录具有完全相同的结构、相同的行数和相同的字段值
如果接收的TClientDataset
没有先前定义的任何字段结构,或者现有结构与分配的数据兼容,那么这样做是安全的。然而,如果我们谈论的是大量的记录,那么分配可能需要很长时间,在极端情况下,它可能会占用计算机的内存(这完全取决于计算机的配置)
为了释放数据,只需关闭数据集
如果您希望有两个TClientDataset
实例,但只有一个记录实例,我的建议是使用该方法,即不复制数据,只在不同的数据集中为其分配一个引用。在这种情况下,两个不同的数据集之间共享的是相同的数据。通过像复制记录一样分配Data
属性。现在,您有了两个不同的ISNTance ofTClientDataset
,两组不同的记录具有完全相同的结构、相同的行数和相同的字段值
如果接收的TClientDataset
没有先前定义的任何字段结构,或者现有结构与分配的数据兼容,那么这样做是安全的。然而,如果我们谈论的是大量的记录,那么分配可能需要很长时间,在极端情况下,它可能会占用计算机的内存(这完全取决于计算机的配置)
为了释放数据,只需关闭数据集
如果您希望有两个TClientDataset
实例,但只有一个记录实例,我的建议是使用该方法,即不复制数据,只在不同的数据集中为其分配一个引用。在这种情况下,两个不同的数据集之间共享的是相同的数据。通过像复制记录一样分配Data
属性。现在,您有了两个不同的ISNTance ofTClientDataset
,两组不同的记录具有完全相同的结构、相同的行数和相同的字段值
如果接收的TClientDataset
没有先前定义的任何字段结构,或者现有结构与分配的数据兼容,那么这样做是安全的。然而,如果我们谈论的是大量的记录,那么分配可能需要很长时间,在极端情况下,它可能会占用计算机的内存(这完全取决于计算机的配置)
为了释放数据,只需关闭数据集
如果您希望有两个TClientDataset
实例,但只有一个记录实例,我的建议是使用该方法,即不复制数据,只在不同的数据集中为其分配一个引用。在这种情况下,两个不同的数据集共享的数据非常相同。+1。感谢您解决这样做安全吗?(所谓安全,我的意思是,我应该期待什么样的异常以及如何处理它们?
。我接受了@uwerabe的回答,因为他首先回答,并解释说数据是参考计数的。这很重要,因为有