Apply メソッドの呼び出し

提供: RAD Studio
移動先: 案内検索

複数の更新オブジェクトの使用:インデックス への移動

メモ: ボーランド データベース エンジン(BDE)の使用は推奨されません。今後 BDE は機能拡張されません。たとえば、BDE では Unicode がサポートされていません。BDE を使用して新たに開発しないことをお勧めします。既存のデータベース アプリケーションを BDE から dbExpress に移行することを検討してください。

アップデートコンポーネントの Apply メソッドは、現在のレコードについて手動で更新を適用します。このプロセスには次の 2 つの手順が関係します。

  1. レコードの元の項目値と変更された項目値を、SQL 文の該当するパラメータに割り当てます。
  2. 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;
}

関連項目