Frage

Ich bin mit Zeos 7 und Delphi 2009 und will zu sehen, zu überprüfen, ob ein Wert ist bereits in der Datenbank unter einem bestimmten Feld, bevor ich die Daten in die Datenbank schreiben.

Beispiel: Feld Stichwort
Werte von Käse, Maus, Falle

tblkeywordKEYWORD.Value = Cheese

Was ist los mit der folgenden? Und gibt es einen besseren Weg?

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

habe ich versucht, die eindeutige Einschränkung in IBExpert verwenden, aber es gibt die folgende Fehlermeldung:

Ungültige Einfüge- oder Aktualisierungswert (e): Objektspalten sind beschränkt - keine 2 Tabellenzeilen können doppelte Spaltenwerte haben. versuchen, doppelten Wert zu speichern (sichtbar aktive Transaktionen) in eindeutigem Index „UNQ1_KEYWORDLIST“.

War es hilfreich?

Lösung

Betrachten UPDATE OR INSERT oder MERGE-Anweisungen zu verwenden:

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

Für Details überprüfen Sie die folgenden Dokumente in Ihren Firebird-Installationsordnern:

  • doc \ sql.extensions \ README.update_or_insert.txt
  • doc \ sql.extensions \ README.merge.txt
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top