複数の更新オブジェクトの使用:インデックス

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

BDE の利用:インデックス への移動


メモ: BDE(Borland Database Engine)は非推奨になったため、今後は機能強化されません。 たとえば、BDE では Unicode はサポートされません。 BDE を使用した新規開発はしないことをお勧めします。 既存のデータベース アプリケーションを BDE から dbExpress に移行することを検討してください。 BDE から dbExpress への移行については、http://www.embarcadero.com/rad-in-action/migration-upgrade-center を参照してください。

更新データセットで参照される複数のベース テーブルを更新する必要があるときは、複数の更新オブジェクト、つまり更新対象の各ベース テーブルに対して 1 つのオブジェクトを使用する必要があります。 データセット コンポーネントの UpdateObject では、データセットに関連付けられるのは、1 つの更新オブジェクトだけなので、各更新オブジェクトとデータセットを DataSet プロパティにデータセット名を設定して、関連付ける必要があります。

ヒント: 複数の更新オブジェクトを使用するときは、TClientDataSet ではなく TBDEClientDataSet を外部プロバイダとともに使用できます。 これは、ソース データセットの UpdateObject プロパティを設定する必要がないからです。

更新オブジェクトの DataSet プロパティは、オブジェクト インスペクタ で設計時に利用できません。 このプロパティを設定できるのは、実行時だけです。

UpdateSQL1.DataSet := Query1;
UpdateSQL1->DataSet = Query1;

更新オブジェクトはこのデータセットを使用して、パラメータを置換するために元のフィールド値と更新された値を取得します。さらに BDE 対応のデータセットである場合は、更新を適用するときに使用するデータベースとセッションを識別します。 パラメータの置換が正しく機能するように、更新オブジェクトの DataSet プロパティは、更新フィールド値を含むデータセットであることが必要です。 BDE 対応のデータセットを使用して、更新をキャッシュするには、これがそのまま BDE 対応のデータセットです。 クライアント データセットを使用するときは、これが、BeforeUpdateRecord イベント ハンドラにパラメータとして渡されるクライアント データセットです。

更新オブジェクトがデータセットの UpdateObject プロパティに割り当てられていないときは、ApplyUpdates を呼び出したときに、その SQL 文が自動的に実行されません。 レコードを更新するには、Bde.DBTables.TBDEDataSet.OnUpdateRecord イベント ハンドラからオブジェクトの更新を、手動で呼び出す必要があります(更新をキャッシュするのに BDE を使用する際)。イベント ハンドラでは、次の最小限のアクションを実行する必要があります。

  • クライアント データセットを使用して、更新をキャッシュする場合は、必ず更新オブジェクトの DatabaseNameSessionName プロパティがソース データセットの DatabaseNameSessionName プロパティに設定されている必要があります。
  • イベント ハンドラでは更新オブジェクトの ExecSQL または Apply メソッドを呼び出す必要があります。 これにより更新が必要な各レコードに対して更新オブジェクトが呼び出されます。 更新文の実行について詳細は、「SQL 文の実行」を参照してください。
  • イベント ハンドラの UpdateAction パラメータを uaAppliedOnUpdateRecord)または Applied パラメータを TrueBeforeUpdateRecord)に設定します。

オプションとして、各レコードの更新で決まる処理や、データ検証、データ変更も実行できます。

警告: 更新オブジェクトの ExecSQL または Apply メソッドを OnUpdateRecord イベント ハンドラで呼び出す場合は、データセットの UpdateObject プロパティにその更新オブジェクトが設定されていないことを確認してください。 設定されていると、結果として、各レコードの更新を適用するように 2 回目も試行されます。

関連項目

トピック