Delphi - 更改包含数据的TClientDataSet的字段定义

时间:2014-01-22 20:22:39

标签: delphi delphi-xe

我在运行时为FieldDefs创建TClientDataSet。仍然在运行时我想删除所有FieldDefs。我将TClientDataSet物理保存到光盘文件中。我尝试使用以下代码删除现有FieldDefs,以便添加新代码。但它不起作用:

with fDataSet do begin
    Active := False;
    DisableControls;
    FieldDefs.Clear;
    Fields.Clear;
    EnableControls;
end;

执行此代码后,FieldDefsFields计数为0,但如果我关闭并重新打开disc fileFieldDefs和{{1}仍然存在。

更改FieldsFieldDefs的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

您必须按照以下几行将旧数据集结构中的数据泵入新数据:

  • 使用新结构定义新的客户数据集。
  • 打开旧客户端数据集。
  • 迭代旧数据集,并在新数据集中插入记录,随时执行任何计算和默认分配。

E.g。

while not FOldDataSet.Eof do
begin
  FNewDataSet.Insert;
  FNewDataSet['FIELD1'] := FOldDataSet['FIELD3'];
  FNewDataSet['FIELD2'] := CDefaultFIELD2;
  FNewDataSet.Post;

  FOldDataSet.Next;
end;

答案 1 :(得分:1)

连续打开从内部数据集重新创建字段。只需清除旧字段defs,添加新字段并重新创建数据集:

...
CDS.FieldDefs.Clear;
CDS.Fields.Add(...);
...
CDS.Fields.Add(...);
CDS.CreateDataSet;
...