データベースを使ってキャッシュアップデートを適用する
提供: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);