API:FireDAC.Comp.Client.TFDQuery.OnUpdateRecord

提供:RAD Studio API Documentation

Delphi

property OnUpdateRecord;

C++

__property OnUpdateRecord;

プロパティ

種類 可視性 ソース ユニット 親
event published
FireDAC.Comp.Client.pas
FireDAC.Comp.Client.hpp
FireDAC.Comp.Client TFDQuery

説明

レコードの更新がデータベースに適用されるときに発生します。 FireDAC.Comp.Client.TFDQuery.OnUpdateRecord は FireDAC.Comp.DataSet.TFDDataSet.OnUpdateRecord を継承しています。以下の内容はすべて FireDAC.Comp.DataSet.TFDDataSet.OnUpdateRecord を参照しています。

レコードの更新がデータベースに適用されるときに発生します。

OnUpdateRecord イベント ハンドラを使用すると、正しくまたは容易に処理できない即時更新またはキャッシュされた更新を、以下のいずれかの方法で処理できます。

  • FireDAC の自動 SQL 更新コマンド生成を利用する
  • 単一のテーブル アダプタ コンポーネントを使用する
  • 単一の更新コンポーネントを使用する

このイベントは、以下を必要とするアプリケーションに役に立ちます。

  • 更新コンポーネントにおけるパラメータ置換およびマクロ置換の制御の強化
  • 複数の SQL 文による更新(DBMS でバッチまたはブロックをサポートしていない場合)
  • SQL 以外での更新のポスト

ASender は、更新を適用する先のデータセットです。 

ARequest は、現在の更新がレコードの挿入、削除、変更のいずれであるかを示します。 

AAction は、OnUpdateRecord イベント ハンドラが終了する前に実行するアクションを示します。ハンドラに入る際に、AAction は常に eaApplied に設定されています。OnUpdateRecord が正常に処理が行われた場合、終了する前に、AAction を eaApplied に設定しなければなりません。

AAction の値 

説明 

eaFail

更新が失敗であると設定し、エラーを返します。 

eaSkip 

現在の更新をスキップし、適用済みにしません。 

eaRetry

現在の操作を再度試みます。 

eaApplied 

現在の更新を適用済みとします。 

eaDefault 

デフォルト アクションを実行します。デフォルト アクションは、更新が成功した場合は eaApplied、失敗した場合は eaFail です。 

eaExitSuccess 

キャッシュされた更新の処理を停止し、成功メッセージを返します。 

eaExitFailure 

キャッシュされた更新の処理を停止し、失敗メッセージを返します。 

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;

関連項目

サンプル