FireDAC.Comp.DataSet.TFDDataSet.OnUpdateRecord
Delphi
property OnUpdateRecord: TFDUpdateRecordEvent read FOnUpdateRecord write FOnUpdateRecord;
C++
__property TFDUpdateRecordEvent OnUpdateRecord = {read=FOnUpdateRecord, write=FOnUpdateRecord};
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
event | public | FireDAC.Comp.DataSet.pas FireDAC.Comp.DataSet.hpp |
FireDAC.Comp.DataSet | TFDDataSet |
説明
レコードの更新がデータベースに適用されるときに発生します。
OnUpdateRecord イベント ハンドラを使用すると、正しくまたは容易に処理できない即時更新またはキャッシュされた更新を、以下のいずれかの方法で処理できます。
- FireDAC の自動 SQL 更新コマンド生成を利用する
- 単一のテーブル アダプタ コンポーネントを使用する
- 単一の更新コンポーネントを使用する
このイベントは、以下を必要とするアプリケーションに役に立ちます。
- 更新コンポーネントにおけるパラメータ置換およびマクロ置換の制御の強化
- 複数の SQL 文による更新(DBMS でバッチまたはブロックをサポートしていない場合)
- SQL 以外での更新のポスト
ASender
は、更新を適用する先のデータセットです。
ARequest
は、現在の更新がレコードの挿入、削除、変更のいずれであるかを示します。
AAction
は、OnUpdateRecord イベント ハンドラが終了する前に実行するアクションを示します。ハンドラに入る際に、AAction
は常に eaApplied
に設定されています。OnUpdateRecord が正常に処理が行われた場合、終了する前に、AAction
を eaApplied
に設定しなければなりません。
AAction の値 |
説明 |
---|---|
|
更新が失敗であると設定し、エラーを返します。 |
|
現在の更新をスキップし、適用済みにしません。 |
|
現在の操作を再度試みます。 |
|
現在の更新を適用済みとします。 |
|
デフォルト アクションを実行します。デフォルト アクションは、更新が成功した場合は |
|
キャッシュされた更新の処理を停止し、成功メッセージを返します。 |
|
キャッシュされた更新の処理を停止し、失敗メッセージを返します。 |
OnUpdateRecord イベント ハンドラのコードでは、NewValue、OldValue、CurValue などのデータセット フィールド値を読み取らなければなりません。詳細は以下のとおりです。
- NewValue は新しいフィールド値で、更新をポストする前のものです。
- OldValue は元のフィールド値で、レコードを取得した後または最後の更新を適用した後のものです。
- CurValue は現在のフィールド値で、Value プロパティと同じものです。
メモ: OnUpdateRecord イベント ハンドラのコードでは、現在のデータセット位置を変更するメソッドを呼び出さないでください。
例
procedure TForm1.FDQuery1UpdateRecord(ASender: TDataSet; ARequest: TFDUpdateRequest;
var AAction: TFDErrorAction; AOptions: TFDUpdateRowOptions);
begin
if ARequest = arInsert then begin
// set the SQL command to insert new record
FDQuery2.SQL := 'insert into mytab (id, code, name) values (:id, :code, :name) returning tmstamp into :ts';
// set parameter values
FDQuery2.Params[0].Value := ASender['id'];
FDQuery2.Params[1].Value := ASender['code'];
FDQuery2.Params[2].Value := ASender['name'];
// specially define TS parameter
FDQuery2.Params[3].DataType := ftDateTime;
FDQuery2.Params[3].ParamType := ptOutput;
// insert new record
FDQuery2.ExecSQL;
// move TS output parameter value back to dataset
ASender['tmstamp'] := FDQuery2.Params[3].Value;
// return 'Ok' status
AAction := eaApplied;
end;
end;
関連項目
- 更新のポスト処理のオーバーライド
- FireDAC.Comp.DataSet.TFDDataSet.ApplyUpdates
- FireDAC.Comp.DataSet.TFDDataSet.CachedUpdates
- FireDAC.Comp.DataSet.TFDDataSet.OnUpdateError