Firebird使用ZeosLib和Delphi插入不同的数据

时间:2010-05-10 01:54:25

标签: delphi delphi-2009 firebird zeos

我正在使用Zeos 7和Delphi 2009,并希望在将数据发布到数据库之前检查特定字段下的数据库中是否已存在值。

示例:字段关键字
奶酪,老鼠,陷阱的价值

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”中存储重复值(对活动事务可见)。

1 个答案:

答案 0 :(得分:1)

考虑使用UPDATE OR 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