データベースを使ってキャッシュアップデートを適用する

提供:RAD Studio (日本語)
移動: 案内, 検索

キャッシュアップデートをデータベース接続のコンテキストで 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);



関連リンク

他言語版