Apply メソッドの呼び出し
メモ: BDE(Borland Database Engine)は非推奨になったため、今後は機能強化されません。 たとえば、BDE では Unicode はサポートされません。 BDE を使用した新規開発はしないことをお勧めします。 既存のデータベース アプリケーションを BDE から dbExpress に移行することを検討してください。
更新コンポーネントの Apply メソッドでは、現在のレコードに対して更新を手動で適用します。 このプロセスには、2 つのステップがあります:
- レコードのフィールドの初期値と変更後の値を、適切な SQL 文におけるパラメータにバインドします。
- SQL 文を実行します。
Apply メソッドを呼び出すと、更新キャッシュにおける現在のレコードに対する更新を、適用することができます。Apply メソッドは、データセットの OnUpdateRecord イベントに対するハンドラか、プロバイダの BeforeUpdateRecord イベント ハンドラから、最もよく呼び出されます。
警告: データセットの UpdateObject プロパティを使用して、データセットと更新オブジェクトを関連付ける場合は、Apply が自動的に呼び出されます。 この場合は、Apply を OnUpdateRecord イベント ハンドラから呼び出さないでください。結果として、現在のレコードの更新を適用するように 2 回目も試行するからです。
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;
}