2017-09-06 89 views
1

我试图计算字段添加到使用下面的代码与我的几个网站,包括堆栈溢出,发现了许多变化与fieldDefs.add创建的现有数据集。无法添加计算领域的ClientDataSet

但由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; 
+0

为什么你需要打开两次?这可能不是问题,可能需要或无害。但这似乎很奇怪。 –

+1

在调用'CreateDataSet'之前,您应该添加所需的所有字段,包括计算的字段。 – MartynA

+0

我从来没有叫'update'加入后再次计算field..I相信'update'打开表,并将其关闭,所以在这一个程序,你打开表三次......不要打开它,直到你完成了。和'active:= true'和'open'做同样的事情,所以选择一个(我更喜欢'open')。 –

回答

0

据卡里詹森在Delphi教学环节Defining a Clientdataset's Structure...你不能创建计算,查询,汇总使用FieldDefs场。您必须改用TFields。

+0

确实。我从来没有发现它是值得与FieldDefs混合的,并且始终只使用DataSet的Fields集合。使用FieldDefs只是提供了一个机会让他们脱离与字段定义的同步。 – MartynA