【问题标题】:Delphi - Change Fields definitions of a TClientDataSet that has dataDelphi - 更改具有数据的 TClientDataSet 的字段定义
【发布时间】:2014-01-23 14:47:09
【问题描述】:

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

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

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

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

【问题讨论】:

  • FieldDefs 和 Fields 必须存在才能将TClientDataSet 保存到文件中。它还能节省什么?它不能包含任何没有基于字段的索引或数据。我不明白你在这里实际上想做什么。 “我想在运行时创建一个 TClientDataSet,删除所有字段,并将其保存到磁盘”?你能edit 澄清你真正想要完成的事情吗?
  • 如果你想更多地关注你的问题,你应该添加delphi标签
  • 嗨,肯。假设我之前创建了一个cds 文件。在给定的时刻,我想programmaticallyfields deffinitions 更改为新的deffinition's set。我认为我能做到这一点的唯一方法是删除all existing deffinitions,然后添加new deffinition's set。对吗?
  • 鲁佛爵士您好。对不起。我添加了标签delphi-xe,里面有delphi这个词。我想这足以识别主题。以后我也会加标签delphi
  • @SirRufo:我错过了标签不在那里。我也应该添加它。

标签: delphi delphi-xe


【解决方案1】:

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

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

例如

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

  FOldDataSet.Next;
end;

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多