我有一个数据集TclientDataSet,其中的字段是通过代码创建的。
我需要用户在保留现有数据的同时向这些字段附加其他字段。
`MYclientDataSet.FieldDefs.Add(s, ftString, 20);
MYclientDataSet.CreateDataset;
MYclientDataSet.Open;
MYclientDataSet.edit;
MYclientDataSet.FieldByName(s).AsString := 'Test';
MYclientDataSet.post;`
这可行,但是CreateDataset会擦除所有数据。
有什么方法可以将新字段添加到数据集中吗?
我尝试了许多其他解决方案,但似乎都没有用
非常感谢
最佳答案
您可以使用以下代码实现此目的,该代码基本上保存当前数据,创建新的字段结构,然后将保存的数据复制回去:
var
cds: TClientDataSet;
begin
cds := TClientDataSet.Create(nil);
try
cds.Data := MyClientDataSet.Data;
MyClientDataSet.Close;
MyClientDataSet.FieldDefs := cds.FieldDefs;
MyClientDataSet.FieldDefs.Add('Note', ftString, 20);
MyClientDataSet.CreateDataSet;
cds.First;
while not cds.Eof do begin
MyClientDataSet.Append;
MyClientDataSet.CopyFields(cds);
MyClientDataSet.FieldByName('Note').AsString := 'Test';
MyClientDataSet.Post;
cds.Next;
end;
finally
cds.Free;
end;
end;