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;
なぜ2回開く必要がありますか?それは問題ではないかもしれませんし、必要でも無害かもしれません。しかし、それは奇妙に見えます。 –
'CreateDataSet'を呼び出す前に、計算したものを含め、必要なすべてのフィールドを追加する必要があります。 – MartynA
計算されたフィールドを追加した後で 'update'をもう一度呼び出すことはありません。' update'がテーブルを開き、それを閉じてしまうので、このルーチンではテーブルを3回開きます。あなたの完了。 'active:= true'と' open'は同じことをしますので、どちらかを選んでください(私は 'open'を好む)。 –