【问题标题】:Cannot add calculation field to clientdataset无法将计算字段添加到客户端数据集
【发布时间】:2018-02-14 19:43:52
【问题描述】:

我正在尝试使用下面的代码向使用fieldDefs.add 创建的现有数据集添加一个计算字段,其中包含我在多个站点上发现的许多变体,包括堆栈溢出。

但是fieldDefs 行或dataSet 行创建的fieldDefsFieldDefs.count 更新时丢失。

Fields.counts 保留但不保存到 XML 文件。

不会引发异常。

有人知道这里发生了什么吗? 谢谢

MYclientDataSet.CreateDataSet;
MYclientDataSet.open;
MYclientDataSet.FieldDefs.Update;
MYclientDataSet.Active := False;
for i := 0 to MYclientDataSet.FieldDefs.Count - 1 do
    MYclientDataSet.FieldDefs[i].CreateField(MYclientDataSet);
fld := TStringField.Create(MYclientDataSet);
with fld do begin
     FieldName := 'PartSummary';
     FieldKind := fkCalculated;
     Calculated := True;
     Name := cds.Name + FieldName;
     DataSet := MYclientDataSet;
     MYclientDataSet.FieldDefs.Add('PartSummary', ftString, 30, false);
     MYclientDataSet.FieldDefs.update;
end;
MYclientDataSet.active := true;
MYclientDataSet.open;
MYclientDataSet.edit;

【问题讨论】:

  • 为什么要打开两次?这可能不是问题,它可能是必要的或无害的。但这似乎很奇怪。
  • 在调用CreateDataSet之前,您应该添加所有需要的字段,包括计算字段。
  • 添加计算字段后我再也没有调用update..我相信update打开表格并关闭它,所以在这个例程中,您打开表格三次.. . 完成之前不要打开它。和active := trueopen 做同样的事情,所以选择一个(我更喜欢open)。

标签: delphi runtime field add tclientdataset


【解决方案1】:

根据 Delphi 教育链接 Defining a Clientdataset's Structure... 中的 Cary Jensen 所述,您无法使用 FieldDefs 创建计算、查找、聚合字段。您必须改用 TFields。

【讨论】:

  • 确实如此。我从来没有发现使用 FieldDefs 是值得的,而总是只使用 DataSet 的 Fields 集合。使用 FieldDefs 只是为他们提供了与字段定义不同步的机会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 2016-10-29
  • 2018-06-28
  • 2017-08-07
  • 2011-07-28
  • 2014-07-17
相关资源
最近更新 更多