【发布时间】:2018-02-14 19:43:52
【问题描述】:
我正在尝试使用下面的代码向使用fieldDefs.add 创建的现有数据集添加一个计算字段,其中包含我在多个站点上发现的许多变体,包括堆栈溢出。
但是fieldDefs 行或dataSet 行创建的fieldDefs 在FieldDefs.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 := true和open做同样的事情,所以选择一个(我更喜欢open)。
标签: delphi runtime field add tclientdataset