1 つのテーブルを表していないデータセットに更新を適用する

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

クライアントの更新要求への応答 への移動


データセット プロバイダが、更新をデータベース サーバーに直接適用する SQL 文を生成する際、そのレコード群があるデータベース テーブルの名前が必要になります。 これは、多くのデータセット(テーブル タイプ データセットや "ライブ" TQuery コンポーネントなど)の場合、自動的に処理されます。 ただし、プロバイダが、結果セットのあるストアド プロシージャや、複数テーブルに対するクエリを基にしたデータに対して、更新を適用しなければならない場合、自動更新をするのに問題があります。 この場合、更新を適用するべきテーブルの名前を取得するのに、簡単な方法がありません。

クエリやストアド プロシージャが BDE 対応のデータセット(TQueryTStoredProc)であり、更新オブジェクトと関連づけられていると、プロバイダはその更新オブジェクトを使用します。 しかし、更新オブジェクトがない場合、Datasnap.Provider.TDataSetProvider.OnGetTableName イベント ハンドラ内で、プログラムでテーブル名を渡すことができます。 イベント ハンドラがテーブル名を渡すと、プロバイダは適切な SQL 文を生成して更新を適用することができます。

テーブル名の提供は、更新の対象が 1 つのデータベース テーブルである(つまり、1 つのテーブル内のレコードだけが更新を必要としている)場合のみ有効です。 更新で、基になっているデータベース テーブル群の複数に変更を施す必要がある場合には、コードにおいて、プロバイダの BeforeUpdateRecord イベントを使用して、更新を明示的に適用しなければなりません。 このイベント ハンドラが更新を適用したら、イベント ハンドラの Applied パラメータを True に設定でき、これにより、プロバイダがエラーを生成しないようになります。

メモ: プロバイダが BDE 対応データセット データセットと関連づけられている場合、BeforeUpdateRecord イベント ハンドラで、更新オブジェクトを使用して、カスタマイズされた SQL 文を使用して更新を適用することができます。

関連項目