function CreateTableInMemory(const AFieldDefs:TFieldDefs):TDataSet;
var
TempTable:TClientDataSet;//定义TClientDataSet变量
begin
TempTable:=nil;//付TempTable为空
Result:=nil;//给出函数的返回值,先为空
if AFieldDefs<>nil then//判断AFieldDefs是否为空
begin
try
TempTable:=TClientDataSet.Create(Application);//创建TempTable控件
TempTable.FieldDefs.Assign(AFieldDefs);//把AFieldDefs的内容付给 TempTable.FieldDefs
TempTable.CreateDataSet;//用TempTable创建表
Result:=(TempTable as TDataSet);//把TempTable as TDataSet付给函数的返回值
Except//处理异常
if TempTable<>nil then
TempTable.Free;//如果TempTable为空则释放TempTable Result:=nil;//为返回值付值为空
raise;
end
end
end;
var
TempTable:TClientDataSet;//定义TClientDataSet变量
begin
TempTable:=nil;//付TempTable为空
Result:=nil;//给出函数的返回值,先为空
if AFieldDefs<>nil then//判断AFieldDefs是否为空
begin
try
TempTable:=TClientDataSet.Create(Application);//创建TempTable控件
TempTable.FieldDefs.Assign(AFieldDefs);//把AFieldDefs的内容付给 TempTable.FieldDefs
TempTable.CreateDataSet;//用TempTable创建表
Result:=(TempTable as TDataSet);//把TempTable as TDataSet付给函数的返回值
Except//处理异常
if TempTable<>nil then
TempTable.Free;//如果TempTable为空则释放TempTable Result:=nil;//为返回值付值为空
raise;
end
end
end;
var
TempTable:TClientDataSet;//TempTable:客户端数据集
begin
TempTable:=nil;//初始化
Result:=nil;//返回值初始化
if AFieldDefs<>nil then //若存在字段定义
begin
try //创建
TempTable:=TClientDataSet.Create(Application);//在本程序创建数据集对象
TempTable.FieldDefs.Assign(AFieldDefs);//连接定义字段
TempTable.CreateDataSet;//生成数据集
Result:=(TempTable as TDataSet); //返回生成的数据集
Except//如果操作不成功
if TempTable<>nil then //如果已生成数据集
TempTable.Free;//那么释放 Result:=nil;//返回值置空
raise;//反馈错误信息
end
end
end; 在程序中按如下方法使用:
procedure TForm1.Button1Click(Sender: TObject);
var
ADataSet:TDataSet;//声明临时数据集对象
begin
ADataSet:=TDataSet.Create(Self);//在本窗体创建临时数据集
with ADataSet.FieldDefs do//生成字段定义对象实例
begin
Add(′Name′,ftString,30,False);
Add(′Value′,ftInteger,0,False);
end; with DataSource1 do
begin
DataSet:=CreateTableInMemory(ADataSet.FieldDefs);//数据源使用创建的内存数据集
DataSet.Open;//打开该数据集
end; ADataSet.Free;//释放临时数据集
end;