如何在没有CreateDataset的情况下向数据集添加新字段?

C. *_*eld 2 delphi field runtime tclientdataset

我有一个数据集TclientDataSet,其中的字段是由代码创建的.我需要用户在保留现有数据的同时附加其他字段.

`MYclientDataSet.FieldDefs.Add(s, ftString, 20);
 MYclientDataSet.CreateDataset;
 MYclientDataSet.Open;
 MYclientDataSet.edit;
 MYclientDataSet.FieldByName(s).AsString := 'Test';
 MYclientDataSet.post;`
Run Code Online (Sandbox Code Playgroud)

这有效,但CreateDataset会删除所有数据.有没有办法将新字段添加到数据集中?

我尝试了很多其他解决方案,但似乎都没有

非常感谢

Uwe*_*abe 5

您可以使用以下代码实现此目的,该代码基本上保存当前数据,创建新的字段结构并将已保存的数据复制回:

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;
Run Code Online (Sandbox Code Playgroud)