ヘルパー(これは必要に応じて削除されています)を使用すると、保護されたメソッドをハックすることなく呼び出すことができます。 fCInternalCalcフィールドのOnCalcFields内にあるDataSet.State = dsInternalCalc
を確認してください。
type
TClientDataSetHelper = class helper for TClientDataSet
public
function AssureEditing: Boolean;
procedure InternalCalc;
end;
function TClientDataSetHelper.AssureEditing: Boolean;
begin
result := not (State in [dsEdit, dsInsert]);
if result then
Edit;
end;
procedure TClientDataSetHelper.InternalCalc;
var
needsPost: Boolean;
saveState: TDataSetState;
begin
needsPost := AssureEditing;
saveState := setTempState(dsInternalCalc);
try
RefreshInternalCalcFields(ActiveBuffer);
finally
RestoreState(saveState);
end;
if needsPost then
Post;
end;
これは、CalculateFields
を使用して通常の計算フィールドで簡単に拡張できます。これは必須ではありませんが、他のデータフィールドが変更されるたびに計算フィールドが再計算されるためです。
したがって、データセットを閉じることはできません。 –
@SertacAkyuzまだ試したことはありません。クライアントデータセットを閉じても、その中のすべてのデータがクリアされませんか? –
......... –