2017-09-06 124 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