Apply メソッドの呼び出し

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

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


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

更新コンポーネントの Apply メソッドでは、現在のレコードに対して更新を手動で適用します。 このプロセスには、2 つのステップがあります:

  1. レコードのフィールドの初期値と変更後の値を、適切な SQL 文におけるパラメータにバインドします。
  2. SQL 文を実行します。

Apply メソッドを呼び出すと、更新キャッシュにおける現在のレコードに対する更新を、適用することができます。Apply メソッドは、データセットの OnUpdateRecord イベントに対するハンドラか、プロバイダの BeforeUpdateRecord イベント ハンドラから、最もよく呼び出されます。

警告: データセットの UpdateObject プロパティを使用して、データセットと更新オブジェクトを関連付ける場合は、Apply が自動的に呼び出されます。 この場合は、ApplyOnUpdateRecord イベント ハンドラから呼び出さないでください。結果として、現在のレコードの更新を適用するように 2 回目も試行するからです。

OnUpdateRecord イベント ハンドラでは、型 TUpdateKindUpdateKind パラメータで適用する必要がある更新の型を示します。 このパラメータを 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;
}

関連項目