更新 SQL 文の構築

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

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

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

設計時には、SQL 更新エディタを使って DeleteSQLInsertSQLModifySQL の各プロパティの SQL 文を記述することができます。SQL 更新エディタを使用しないときや、生成された文を修正するときは、以下で述べる要領にしたがって、ベーステーブル内のレコードを削除、挿入、または変更する文を記述してください。

DeleteSQL プロパティは、DELETE コマンドを使った SQL 文だけを含んでいる必要があります。更新対象のベーステーブル名を FROM 節に指定する必要があります。アップデートキャッシュ内で削除されたレコードに対応するベーステーブル内のレコードだけを削除するには、SQL 文で WHERE 節を使用します。WHERE 節のパラメータとして、キャッシュアップデートレコードに対応するベーステーブル内のレコードをユニークに識別するための 1 つまたは複数の項目を使用します。項目名の頭に「OLD_」を付けたのと同じ名前のパラメータならば、キャッシュアップデートレコードの対応する項目からそのパラメータに自動的に値が割り当てられます。パラメータの名前がそれ以外ならば、自分でパラメータ値を指定する必要があります。

DELETE FROM Inventory I
WHERE (I.ItemNo = :OLD_ItemNo)

テーブルの種類によっては、レコードの識別に使用される項目がヌル値のときにベーステーブル内でレコードを見つけられません。その場合、それらのレコードの削除更新は失敗します。これに対処するため、NULL を含む可能性のある項目について、IS NULL 述語を使って条件を追加します(NULL 以外の値の場合の条件に加えて)。たとえば、FirstName 項目の値が NULL のことがある場合、次のようにします。

DELETE FROM Names
WHERE (LastName = :OLD_LastName) AND
  ((FirstName = :OLD_FirstName) OR (FirstName IS NULL))

InsertSQL 文は、INSERT コマンドを使った SQL 文だけで構成する必要があります。更新対象のベーステーブルの名前を INTO 節で指定する必要があります。VALUES 節には、パラメータをカンマで区切ったリストを指定します。パラメータ名が項目名と同じならば、パラメータにはキャッシュアップデートレコードから自動的に値が割り当てられます。パラメータの名前がそれ以外ならば、自分でパラメータ値を指定する必要があります。パラメータのリストは、新規挿入レコードの項目値を指定します。文の中でリストされている項目の数と同じ数の値パラメータが存在する必要があります。

INSERT INTO Inventory
(ItemNo, Amount)
VALUES (:ItemNo, 0)

ModifySQL 文は、UPDATE コマンドを使った SQL 文だけで構成する必要があります。更新対象のベーステーブル名を FROM 節に指定する必要があります。SET 節で 1 つまたは複数の値を割り当てます。SET 節で割り当てた値が、項目と同じパラメータ名ならば、パラメータには自動的にキャッシュ内の更新レコード内の同名項目から値が割り当てられます。どの項目名とも名前が一致しないほかのパラメータ名を使用して、項目値を追加で割り当てることもできます。ただし、この値は自分で手入力で指定する必要があります。DeleteSQL 文と同様に、更新対象のベーステーブル内でレコードをユニークに識別するために、項目名の頭に "OLD_" を付けたパラメータ名を使って WHERE 節を指定します。次の更新文では、パラメータ :ItemNo には自動的に値が割り当てられますが、:Price は自動的ではありません。

UPDATE Inventory I
SET I.ItemNo = :ItemNo, Amount = :Price
WHERE (I.ItemNo = :OLD_ItemNo)

上の SQL で、アプリケーションのエンドユーザーが既存のレコードを変更する場合を例として考えてみましょう。ItemNo 項目の元の値は 999 です。キャッシュデータセットに接続されたグリッドで、エンドユーザーは ItemNo 項目の値を 123 に、Amount を 20 に変えました。ApplyUpdates メソッドが呼び出されると、この SQL 文は、:OLD_ItemNo パラメータで古い項目値を使用するので、ベーステーブル内で ItemNo 項目が 999 のすべてのレコードに影響します。これらのレコードで、ItemNo 項目の値は 123 になり(:ItemNo パラメータを使用、値はグリッドから)、Amount は 20 になります。

関連項目