Mysql
 sql >> Database >  >> RDS >> Mysql

Colonna sconosciuta nell'elenco dei campi

È perché il tuo

VALUES (%s,%s)

non circonda il contenuto della variabile namee e family tra virgolette. Pertanto, il tuo motore Sql di back-end pensa al tuo mohsen è un nome di colonna, non un valore.

Invece, usa, ad es.

VALUES (''%s'',''%s'')

come in

  Namee := 'mohsen';
  Family := 'dolatshah';
  aSQLText:= 'INSERT INTO b_tbl(Name,Family) VALUES (''%s'',''%s'')';
  aSQLCommand := Format(aSQLText,[namee,family]);

Nella versione originale della mia risposta, ho spiegato come risolvere il tuo problema "raddoppiando" le virgolette singole nell'Sql che stavi cercando di costruire, perché mi sembrava che avessi difficoltà a vedere (letteralmente) cosa c'era che non andava in cosa stavi facendo.

Un modo alternativo (e migliore) per evitare il tuo problema (e quello che uso sempre nella vita reale) è usare QuotedStr() funzione. Lo stesso codice diventerebbe quindi

aSQLText := 'INSERT INTO b_tbl (Name, Family) VALUES (%s, %s)'; 
aSQLCommand := Format(aSQLText, [QuotedStr(namee), QuotedStr(family)]);

Secondo la Guida in linea:

Ciò che significa "ripetuto" è ciò che ho chiamato "raddoppio". Perché è importante e il motivo principale per cui uso QuotedStr è evitare che il motore db SQL dia un errore quando il valore che vuoi inviare contiene un singolo carattere di virgolette come in O'Reilly .

Prova ad aggiungere una riga contenente quel nome alla tua tabella usando MySql Workbench e vedrai cosa intendo.

Quindi, l'utilizzo di QuotedStr non solo rende la costruzione di istruzioni SQL come stringhe nel codice Delphi meno soggetta a errori, ma evita anche problemi nel back-end.