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".

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top