Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Unbekannte Spalte in Feldliste

Das liegt daran, dass Ihr

VALUES (%s,%s)

den Inhalt der Namens- und Familienvariablen nicht in Anführungszeichen setzt. Daher denkt Ihre Back-End-SQL-Engine, dass Ihr mohsen ist ein Spaltenname, kein Wert.

Verwenden Sie stattdessen z. B.

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

wie in

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

In der Originalversion meiner Antwort habe ich erklärt, wie Sie Ihr Problem beheben können, indem Sie einfache Anführungszeichen in der SQL, die Sie erstellen wollten, "verdoppeln", da es mir so vorkam, als hätten Sie (buchstäblich) Schwierigkeiten zu erkennen, was mit was nicht stimmt Sie taten.

Eine alternative (und bessere) Möglichkeit, Ihr Problem zu vermeiden (und die ich im wirklichen Leben immer verwende), ist die Verwendung von QuotedStr() Funktion. Derselbe Code würde dann zu

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

Laut Online-Hilfe:

Was es mit "wiederholt" bedeutet, habe ich als "verdoppeln" bezeichnet. Warum das wichtig ist, und der Hauptgrund, warum ich QuotedStr verwende, ist, zu vermeiden, dass die SQL-Datenbank-Engine einen Fehler ausgibt, wenn der Wert, den Sie senden möchten, ein einfaches Anführungszeichen enthält, wie in O'Reilly .

Versuchen Sie, Ihrer Tabelle mit MySql Workbench eine Zeile hinzuzufügen, die diesen Namen enthält, und Sie werden sehen, was ich meine.

Die Verwendung von QuotedStr macht also nicht nur das Konstruieren von SQL-Anweisungen als Strings im Delphi-Code weniger fehleranfällig, sondern vermeidet auch Probleme am Back-End.