1

Zeos7とDelphi2009を使用していて、データベースにデータを投稿する前に、特定のフィールドの下の値がデータベースにすでに存在するかどうかを確認したいと思います。


例:チーズ、マウス、トラップのフィールドキーワード値

tblkeywordKEYWORD.Value = Cheese

次の何が問題になっていますか?そして、もっと良い方法はありますか?

zQueryKeyword.SQL.Add('IF NOT EXISTS(Select KEYWORD from KEYWORDLIST ='''+
  tblkeywordKEYWORD.Value+''')INSERT into KEYWORDLIST(KEYWORD) VALUES ('''+
  tblkeywordKEYWORD.Value+'''))');
zQueryKeyword.ExecSql;

IBExpertで一意性制約を使用しようとしましたが、次のエラーが発生します。

無効な挿入または更新値:オブジェクト列が制約されています-2つのテーブル行が重複する列値を持つことはできません。重複する値(アクティブなトランザクションに表示される)を一意のインデックス「UNQ1_KEYWORDLIST」に格納しようとします。

4

1 に答える 1

1

UPDATE、INSERT、またはMERGEステートメントの使用を検討してください。

update or insert into KEYWORDLIST (KEYWORD) values(:KEYWORD) matching(KEYWORD)

詳細については、Firebirdインストールフォルダにある次のドキュメントを確認してください。

  • doc \ sql.extensions \ README.update_or_insert.txt
  • doc \ sql.extensions \ README.merge.txt
于 2010-05-10T06:07:26.220 に答える