データベースを使ってキャッシュアップデートを適用する
BDE を使用した更新情報のキャッシュ:インデックス への移動
メモ: ボーランド データベース エンジン(BDE)は推奨されなくなったので、今後は機能強化されません。たとえば、BDE では Unicode はサポートされません。BDE を使用して新規に開発を始めないでください。既存のデータベース アプリケーションを BDE から dbExpress に移行することを検討してください。
キャッシュアップデートをデータベース接続のコンテキストで 1 つまたは複数のデータセットに適用するには、そのデータベースコンポーネントの ApplyUpdates メソッドを呼び出します。次のコードは、ボタンクリックイベントに応答して CustomersQuery データセットの更新を適用します。
procedure TForm1.ApplyButtonClick(Sender: TObject); begin // Paradox,dBASE,FoxPro などのローカルデータベースでは // TransIsolation を tiDirtyRead に設定する if not (Database1.IsSQLBased) and not (Database1.TransIsolation = tiDirtyRead) then Database1.TransIsolation := tiDirtyRead; Database1.ApplyUpdates([CustomersQuery]); end;
void __fastcall TForm1::ApplyButtonClick(TObject *Sender) { // Paradox,dBASE,FoxPro などのローカルデータベースでは // TransIsolation を tiDirtyRead に設定する if (!Database1->IsSQLBased && Database1->TransIsolation != tiDirtyRead) Database1->TransIsolation = tiDirtyRead; Database1->ApplyUpdates(&CustomersQuery,0); }
上記のシーケンスは、自動的に生成されたトランザクションのコンテキストで、キャッシュアップデートをデータベースに書き込みます。成功した場合、トランザクションのコミット、さらにキャッシュアップデートのコミットが続きます。失敗した場合、トランザクションはロールバックされ、アップデートキャッシュの内容は変更されません。後者の場合は、データセットの OnUpdateError イベントを通じてキャッシュアップデートエラーをアプリケーションで処理する必要があります。更新エラーの処理については、「キャッシュアップデートエラーの処理」を参照してください。
データベースコンポーネントの ApplyUpdates メソッドを呼び出すことの主な利点は、そのデータベースに関連するデータセットコンポーネントをいくつでも更新できることです。データベースの ApplyUpdates メソッドのパラメータは、TDBDataSet の配列です。たとえば、次のコードは 2 つの問い合わせの更新を適用します。
if not (Database1.IsSQLBased) and not (Database1.TransIsolation = tiDirtyRead) then Database1.TransIsolation := tiDirtyRead; Database1.ApplyUpdates([CustomerQuery, OrdersQuery]);
TDBDataSet* ds[] = {CustomerQuery, OrdersQuery}; if (!Database1->IsSQLBased && Database1->TransIsolation != tiDirtyRead) Database1->TransIsolation = tiDirtyRead; Database1->ApplyUpdates(ds,1);