Apply メソッドの呼び出し
メモ: ボーランド データベース エンジン(BDE)の使用は推奨されません。今後 BDE は機能拡張されません。たとえば、BDE では Unicode がサポートされていません。BDE を使用して新たに開発しないことをお勧めします。既存のデータベース アプリケーションを BDE から dbExpress に移行することを検討してください。
アップデートコンポーネントの Apply メソッドは、現在のレコードについて手動で更新を適用します。このプロセスには次の 2 つの手順が関係します。
- レコードの元の項目値と変更された項目値を、SQL 文の該当するパラメータに割り当てます。
- SQL 文を実行します。
Apply メソッドは、アップデートキャッシュ内の現在のレコードについて更新を適用するときに呼び出します。Apply メソッドは、ほとんどの場合、データセットの OnUpdateRecord イベントハンドラ、またはプロバイダの BeforeUpdateRecord イベントハンドラから呼び出されます。
警告: データセットとアップデートオブジェクトの関連付けにデータセットの UpdateObject プロパティを使用する場合、Apply メソッドは自動的に呼び出されます。この場合、OnUpdateRecord イベントのハンドラで Apply を呼び出すと、現在のレコードの更新を再度適用しようとするので、呼び出さないでください。
OnUpdateRecord イベントハンドラは、適用する必要がある更新の種類を、TUpdateKind 型のパラメータ UpdateKind で示します。このパラメータを Apply メソッドに渡して、どの更新 SQL 文を使用するか指示しなければなりません。この内容を BeforeUpdateRecord イベントハンドラを使った以下のコードで示します。
procedure TForm1.BDEClientDataSet1BeforeUpdateRecord(Sender: TObject; SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind; var Applied: Boolean); begin with UpdateSQL1 do begin DataSet := DeltaDS; DatabaseName := (SourceDS as TDBDataSet).DatabaseName; SessionName := (SourceDS as TDBDataSet).SessionName; Apply(UpdateKind); Applied := True; end; end;
void __fastcall TForm1::BDEClientDataSet1BeforeUpdateRecord(TObject *Sender, TDataSet *SourceDS, TCustomClientDataSet *DeltaDS, TUpdateKind UpdateKind, bool &Applied) { UpdateSQL1->DataSet = DeltaDS; TDBDataSet *pSrcDS = dynamic_cast<TDBDataSet *>(SourceDS); UpdateSQL1->DatabaseName = pSrcDS->DatabaseName; UpdateSQL1->SessionName = pSrcDS->SessionName; UpdateSQL1->Apply(UpdateKind); Applied = true; }