Firebird Inserire Distinto dati mediante Zeoslib e Delphi
-
04-10-2019 - |
Domanda
sto usando Zeos 7, e Delphi 2009 e vuole verificare se un valore è già presente nel database in un campo specifico prima di postare i dati nel database.
Esempio: Campo Chiave
I valori di formaggio, Topo, Trappola
tblkeywordKEYWORD.Value = Cheese
Cosa c'è di sbagliato con la seguente? E c'è un modo migliore?
zQueryKeyword.SQL.Add('IF NOT EXISTS(Select KEYWORD from KEYWORDLIST ='''+
tblkeywordKEYWORD.Value+''')INSERT into KEYWORDLIST(KEYWORD) VALUES ('''+
tblkeywordKEYWORD.Value+'''))');
zQueryKeyword.ExecSql;
Ho provato ad utilizzare il vincolo unico in IBExpert, ma dà il seguente errore:
inserto valido o valore di aggiornamento (s): colonne di oggetto sono vincolato - no 2 righe della tabella possono avere valori di colonna duplicati. tentare di memorizzare valore duplicato (visibile a transazioni attive) in indice univoco "UNQ1_KEYWORDLIST".
Soluzione
Si consideri ad utilizzare le istruzioni UPDATE o inserire o unire:
update or insert into KEYWORDLIST (KEYWORD) values(:KEYWORD) matching(KEYWORD)
Per i dettagli controllare i seguenti documenti nella cartella di installazione di Firebird:
- doc \ sql.extensions \ README.update_or_insert.txt
- doc \ sql.extensions \ README.merge.txt