我有一个数据集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;

09-04 13:30