SQL 更新文でのパラメータ置換について
BDE を使用した更新情報のキャッシュ:インデックス への移動
メモ: ボーランド データベース エンジン(BDE)は推奨されなくなったので、今後は機能強化されません。たとえば、BDE では Unicode はサポートされません。BDE を使用して新規に開発を始めないでください。既存のデータベース アプリケーションを BDE から dbExpress に移行することを検討してください。
SQL 更新文では特殊な形のパラメータ置換を使用していて、レコードの更新で古い項目値または新しい項目値のどちらかを代入できるようになっています。SQL 更新エディタはその文を生成するときに、どの項目値を使用するかを決めます。SQL 更新文を書くとき、使用する項目値を指定してください。
パラメータ名がテーブルの列名と一致すると、当該レコードのキャッシュアップデート内の項目の新しい値が自動的にパラメータ値として使用されます。パラメータ名が文字列「OLD_」が前に付く列名と一致した場合は、項目の古い値が使用されます。たとえば、以下の SQL 更新文では、パラメータ :LastName
には、挿入されたレコードについてキャッシュアップデート内の新しい項目値が自動的に代入されます。
INSERT INTO Names (LastName, FirstName, Address, City, State, Zip) VALUES (:LastName, :FirstName, :Address, :City, :State, :Zip)
新しい項目値は通常、InsertSQL 文や ModifySQL 文の中で使用されます。変更されたレコードの更新では、キャッシュアップデートの新しい項目値が UPDATE 文に使用され、更新対象のベーステーブルの古い項目値が置換されます。
削除レコードの場合は新しい値はないので、DeleteSQL プロパティが「:Old_FieldName」構文を使用します。古い項目値も、通常、変更または削除更新用の SQL 文の WHERE 節で、どのレコードを更新または削除するか判断するために使用されます。
UPDATE または DELETE SQL 更新文の WHERE 節には、少なくとも、キャッシュデータを使って更新する対象のベーステーブル内でレコードをユニークに識別できるだけの数のパラメータを指定してください。たとえば、顧客リストで顧客の名字だけを使用しても、ベーステーブル内で正しいレコードをユニークに識別するには不十分です。「Smith」の名字のレコードはいくつもあるかもしれません。パラメータとして名字、名前、それに電話番号を使用すれば、十分な組み合わせになります。もっと好ましいのは、顧客番号のような固有の項目値を使用することです。
メモ: 作成した SQL 文の中のパラメータが、編集した項目値も元の項目値も参照していない場合、アップデートオブジェクトではそのパラメータにどの値を割り当てればよいかが判断できません。このような場合は、アップデートオブジェクトの Query プロパティを使って手動で設定できます。