2016-07-07 17 views
2

Ich versuche, einige Informationen zu MySQL mit Pascal einzufügen, aber wenn ich das Programm ausführen erhalte ich die FehlerUnbekannte Spalte in Feldliste

unbekannt Spalte ‚mohsen‘ in Feldliste

Dies ist mein Code

procedure TForm1.Button1Click(Sender: TObject); 
var 
    aSQLText: string; 
    aSQLCommand: string; 
    namee:string; 
    family:string; 
begin 
    namee:='mohsen'; 
    family:='dolatshah'; 
    aSQLText:= 'INSERT INTO b_tbl(Name,Family) VALUES (%s,%s)'; 
    aSQLCommand := Format(aSQLText, [namee, family]); 
    SQLConnector1.ExecuteDirect(aSQLCommand); 
    SQLTransaction1.Commit; 
end; 

Wie kann ich dieses Problem lösen?

Antwort

2

Es ist, weil Ihr

VALUES (%s,%s) 

ist nicht die namee und Familie variable Inhalte durch Anführungszeichen umgeben. Daher denkt Ihre Back-End-Sql-Engine, dass mohsen ein Spaltenname und kein Wert ist.

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 ursprünglichen Version meiner Antwort habe ich erklärt, wie Sie Ihr Problem zu beheben, indem Sie „Verdoppelung“ Apostrophe in der Sql Sie zu bauen versuchten, weil es schien, für mich, dass Sie Schwierigkeiten hatten, (wörtlich) zu sehen, was mit dem, was Sie taten, falsch war.

Eine alternative (und bessere) Möglichkeit, Ihr Problem (und das, das ich immer im wirklichen Leben benutze) zu vermeiden, ist die Verwendung der QuotedStr() Funktion. Der gleiche Code wäre dann

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

Nach der Online-Hilfe:

Verwenden QuotedStr den String S in einen String in Anführungszeichen zu konvertieren. Ein einfaches Anführungszeichen (')> wird am Anfang und am Ende von S eingefügt, und jedes einzelne Anführungszeichen im String wird> wiederholt.

Was bedeutet "wiederholt" ist, was ich als "Verdoppelung" bezeichnet habe. Warum das wichtig ist und der Hauptgrund, warum ich QuotedStr benutze, ist, zu vermeiden, dass die Sql db-Engine einen Fehler auslöst, wenn der zu sendende Wert ein einfaches Anführungszeichen wie in O'Reilly enthält.

Versuchen Sie, eine Zeile mit diesem Namen zu Ihrer Tabelle mit MySql Workbench hinzufügen, und Sie werden sehen, was ich meine.

So macht das Verwenden von QuotedStr nicht nur das Konstruieren von SQL-Anweisungen als Zeichenfolgen in Delphi-Code weniger fehleranfällig, sondern vermeidet auch Probleme am Backend.

+0

Ich versuchte, aber ich arbeite –

+1

Definieren Sie "nicht funktioniert". Welche Fehlermeldung erhalten Sie? Übrigens, der Code in Ihrem q sieht falsch aus (z. B. "Feld" ist falsch geschrieben), bitte tu das nicht, es verschwendet einfach die Zeit aller Beteiligten - füge deinen genauen Code und deine Fehlermeldung in deinen q ein. – MartynA

+0

, dass eror war gleich eror ich fragte es tunest ändern –

-1

Um diese Art von Problem und SQL-Injection zu vermeiden, sollten Sie sich wirklich mit SQL-Parametern befassen, nicht mit der Pascal-Formatanweisung.

+0

Dies ist ein Kommentar, keine Antwort. –

Verwandte Themen