Firebird einfügen Distinct Daten mit Hilfe von ZeosLib und Delphi
-
04-10-2019 - |
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“.
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