FireDAC.Comp.DataSet.TFDDataSet.OnReconcileError
Delphi
property OnReconcileError: TFDReconcileErrorEvent read FOnReconcileError write FOnReconcileError;
C++
__property TFDReconcileErrorEvent OnReconcileError = {read=FOnReconcileError, write=FOnReconcileError};
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
event | public | FireDAC.Comp.DataSet.pas FireDAC.Comp.DataSet.hpp |
FireDAC.Comp.DataSet | TFDDataSet |
説明
適用できないレコード更新をデータセットが調停する必要があるときに発生します。
OnReconcileError イベントのイベント ハンドラを使用すると、ApplyUpdates メソッドでデータベース レコードに変更が適用されているときに発生するエラー状況に応答できます。OnReconcileError イベントのイベント ハンドラは Reconcile メソッドで呼びされます。
Reconcile が呼び出されると、データセットでは、例外オブジェクトが関連付けられているすべてのレコードを反復処理します。そのようなレコードごとに、OnReconcileError イベントのイベント ハンドラが呼び出されます。このイベント ハンドラでは、以下を引数として受け取ります。
- E -- 例外オブジェクトへの参照です。例外オブジェクトの扱い方については、「エラーの処理」トピックを参照してください。
- UpdateKind -- 現在のレコードの更新の種類です。取り得る値は
rsInserted、rsDeleted、rsModified、rsUnchanged
のいずれかです。
イベント ハンドラでは、エラーを処理した後、Action 引数を設定しなければなりません。デフォルト値は raMerge
です。取り得る値は以下のとおりです。
アクション |
説明 |
---|---|
|
現在のレコードをスキップします。 |
|
Reconcile 呼び出しを終了します。 |
|
現在のレコードのエラー状態をクリアします。その結果、レコードに加えられた変更がそのレコードの初期状態になります。つまり、変更がデータセット レコード キャッシュにマージされます。 |
|
現在のレコードのエラー状態をクリアします。つまり、正しく適用されたレコードと見なします。 |
|
現在のレコードに対する変更をキャンセルします。 |
|
現在のレコードに対する変更をキャンセルし、レコード値をデータベースから読み取り直します。 |
イベント ハンドラでは、OldValue プロパティと NewValue プロパティを読み取ることで、元のフィールド値と現在のフィールド値を分析できます。また、アプリケーションでは、現在のフィールド値を更新し、Action を raCorrect
に設定し、後で ApplyUpdates を再度呼び出すこともできます。
例
procedure TForm1.FDMemTable1ReconcileError(DataSet: TFDDataSet; E: EFDException;
UpdateKind: TFDDatSRowState; var Action: TFDDAptReconcileAction);
begin
if (UpdateKind = rsInserted) and (E is EFDDBEngineException) and (EFDDBEngineException(E).Kind = ekUKViolated) then begin
DataSet.FieldByName('ID').AsInteger := GetNextFreeID;
Action := raCorrect;
end;
end;