クライアント データセットを更新情報のキャッシュに使用する

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

クライアント データセットの使用:インデックス への移動

デフォルトでは,たいていのデータセットのデータを編集して,レコードを削除または登録するたびに,データセットにより,トランザクションの生成,そのレコードの削除,またはデータベースサーバーへのそのレコードの書き込みが行われます。データベースに変更内容を書き込むこときに問題が発生すると,アプリケーションに対してただちに,レコードを登録したときにデータセットで例外が発生したと通知されます。

データセットでリモートデータベースサーバーを使用している場合,この方法だと,現在のレコードを編集した後新しいレコードに移動するたびにアプリケーションとサーバーとの間にネットワークトラフィックが発生するためパフォーマンスが低下することがあります。ネットワークトラフィックを最小限に抑えるために,ローカルでキャッシュアップデートを使用するようにします。キャッシュアップデートを使用すると,アプリケーションで,データベースから取り出したデータをキャッシュに入れてローカルで編集してから,キャッシュ内の更新内容を 1 回のトランザクションでデータベースに適用できます。キャッシュアップデートを使用すると,データセットに対する更新内容(変更内容の登録やレコードの削除)は,データセットの基となるテーブルに直接書き込むのではなくローカルのキャッシュに記憶されます。変更を完了したら,アプリケーションは,キャッシュに入っている変更内容をデータベースに書き込んでキャッシュをクリアするメソッドを呼び出します。

キャッシュアップデートによって,トランザクション時間を最小限にし,ネットワークトラフィックを減らすことができます。ただし,キャッシュに入れられているデータは,アプリケーションに対してローカルであり,トランザクション制御下にはありません。したがって,ローカルなメモリ上にコピーされたデータに対して作業している間に,ほかのアプリケーションがそのデータの基となるデータベーステーブルのデータを変更することもあります。また,キャッシュアップデートを適用するまでは変更を見ることはできません。そのため,キャッシュアップデートは,変わりやすいデータを扱うアプリケーションには適していません。データベースに変更をマージしようとするとあまりにも多くの矛盾をまねいたりするからです。

BDE や ADO にはキャッシュアップデートの代替メカニズムが用意されていますが,キャッシュアップデートにクライアントデータセットを使用すると,次のようないくかのメリットがあります。

  • データセットがマスター/詳細関係でリンクされているときの更新の処理がユーザーに代わって行われます。このため,複数のリンクされたデータセットへの更新は正しい順序で適用されます。
  • クライアントデータセットを使用すると,ユーザーによる更新プロセスの制御が最大になります。レコードを更新するために生成される SQL に影響を及ぼすプロパティを設定したり,マルチテーブルの結合からレコードを更新するときに使用するテーブルを指定することができるほか,BeforeUpdateRecord イベントハンドラから手動で更新することさえできます。
  • キャッシュアップデートをデータベースサーバーに適用したときにエラーが発生すると,クライアントデータセット(およびデータセットプロバイダ)のみから,データセットからの元の(未編集の)値と失敗した更新の新しい(編集された)値に加えてデータベースサーバー上の現在のレコード値に関する情報が得られます。
  • クライアントデータセットを使用して,更新全体がロールバックされるまでの許容更新エラー数を指定できます。

以下のトピックでは,クライアントデータセットをキャッシュアップデートに使用する際の詳細について説明しています。

関連項目