2010-05-10 16 views
1

J'utilise Zeos 7 et Delphi 2009 et je veux vérifier si une valeur est déjà dans la base de données sous un champ spécifique avant de publier les données dans la base de données.Firebird Insérer des données distinctes à l'aide de ZeosLib et Delphi

Exemple: champ Mot-clé
Les valeurs de fromage, souris, piège

tblkeywordKEYWORD.Value = Cheese 

Quel est le problème avec ce qui suit? Et y a-t-il un meilleur moyen?

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

J'ai essayé d'utiliser la contrainte unique dans IBExpert, mais il donne l'erreur suivante:

Invalid insert or update value(s): object columns are constrained - no 2 table rows can have duplicate column values. attempt to store duplicate value (visible to active transactions) in unique index "UNQ1_KEYWORDLIST".

+0

Votre instruction SQL telle que publiée contient parens inégalée, il est donc peu probable que vous obtenez l'erreur que vous show - Zeos devrait lancer une erreur de syntaxe à la place. – mghie

+0

Ce message d'erreur provient d'essayer de faire la contrainte unique dans IBExpert, pas à partir du SQL. – Brad

Répondre

1

Tenir compte à utiliser des instructions UPDATE ou INSERT ou MERGE:

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

Pour les détails Vérifier les documents suivants dans votre dossier d'installation de Firebird:

  • doc \ sql.extensions \ README.update_or_insert.txt
  • doc \ sql.extensions \ README.merge.txt
+0

Merci pour l'information Dmitry – Brad

+0

Dmitry, aurait acheté vos composants, mais sur mon budget actuel. – Brad

+0

Eh bien, vous pouvez toujours demander une réduction. –