BDE ベースのキャッシュ アップデートを適用する

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

BDE を使用した更新情報のキャッシュ:インデックス への移動

メモ: ボーランド データベース エンジン(BDE)は推奨されなくなったので、今後は機能強化されません。たとえば、BDE では Unicode はサポートされません。BDE を使用して新規に開発を始めないでください。既存のデータベース アプリケーションを BDE から dbExpress に移行することを検討してください。

アップデートを適用する処理は、アプリケーションがエラーから適切に回復できるように、データベースコンポーネントのトランザクションのコンテキストの下で 2 段階の処理に分けて行われます。データベースコンポーネントを使ったトランザクション処理については、「トランザクションの管理」を参照してください。

データベーストランザクション制御の下で更新を実行した場合、以下の処理が行われます。

  1. データベーストランザクションが開始されます。
  2. キャッシュされている更新レコードがデータベースに書き込まれます(第 1 段階)。OnUpdateRecord イベントが用意されていれば、データベースに書き込むレコードごとに 1 回ずつ OnUpdateRecord イベントが発生します。レコードをデータベースに適用するときにエラーが発生した場合は、OnUpdateError イベントが用意されていれば OnUpdateError イベントが発生します。
  3. トランザクションは、書き込みが正常に完了した場合はコミットされ、失敗した場合はロールバックされます。
書き込みステータス トランザクション

成功

データベースの変更がコミットされ、データベーストランザクションが終了する

キャッシュアップデートがコミットされ、内部キャッシュバッファがクリアされる(第 2 段階)

失敗

データベースの変更がロールバックされ、データベーストランザクションが終了する

キャッシュアップデートはコミットされず、そのまま内部キャッシュに残る


OnUpdateRecord イベントハンドラの作成および使用については、「OnUpdateRecord イベントハンドラの作成」を参照してください。キャッシュアップデートの適用時に発生する更新エラーの処理については、「キャッシュアップデートエラーの処理」を参照してください。

メモ:  キャッシュアップデートを適用する処理は、マスター/詳細関係を持つ複数のデータセットを扱う場合には特に注意を要します。これは、各データセットに更新を適用する順序が問題になるためです。削除レコードを処理する場合以外は、詳細テーブルより先にマスターテーブルを更新する必要があります(削除レコードはこの順序が守られるために除く)。このような制約があるため、マスター/詳細フォームでキャッシュアップデートを実行する場合は、クライアントデータセットの使用を強くお勧めします。クライアントデータセットでは、マスター/詳細関係に伴う順序の問題がすべて自動的に処理されます。

BDE ベースで更新を適用するには、2 とおりの方法があります。

  • ApplyUpdates メソッドを呼び出すことによって、データベースコンポーネントを使って更新を適用する。これは最も簡単な方法です。この場合、更新プロセスのトランザクションを管理し更新の終了時にデータセットのキャッシュをクリアする処理がすべてデータベースによって実行されるためです。
  • データセットの ApplyUpdates メソッドと CommitUpdates メソッドを呼び出して、単一データセットに更新を適用する。データセットレベルで更新を適用する場合は、その更新処理をまとめたトランザクションを明示的にコードで表すと同時に、CommitUpdates を明示的に呼び出してキャッシュ内の更新内容をコミットする必要があります。

警告:  ライブ結果セットを返さないストアドプロシージャまたは SQL 問い合わせからの更新を適用するには、TUpdateSQL を使って更新の実行方法を指定する必要があります。結合(複数のテーブルが関係する問い合わせ)を更新する場合は、関係するテーブルごとに TUpdateSQL オブジェクトを 1 つずつ準備し、OnUpdateRecord イベントハンドラを使用してこれらのオブジェクトを呼び出して、更新する必要があります。詳細については、「更新オブジェクトを使ったデータセットの更新」を参照してください。

関連項目