それはあなたの
VALUES (%s,%s)
名前とファミリ変数の内容を引用符で囲んでいません。したがって、バックエンドSQLエンジンはmohsen
を認識します は列名であり、値ではありません。
代わりに、たとえば
を使用してくださいVALUES (''%s'',''%s'')
のように
Namee := 'mohsen';
Family := 'dolatshah';
aSQLText:= 'INSERT INTO b_tbl(Name,Family) VALUES (''%s'',''%s'')';
aSQLCommand := Format(aSQLText,[namee,family]);
私の回答の元のバージョンでは、作成しようとしているSQLの単一引用符を「2倍にする」ことで問題を解決する方法を説明しました。あなたがやっていた。
あなたの問題(そして私が実際にいつも使っているもの)を回避するための別の(そしてより良い)方法は、QuotedStr()
を使うことです。 働き。同じコードが
aSQLText := 'INSERT INTO b_tbl (Name, Family) VALUES (%s, %s)';
aSQLCommand := Format(aSQLText, [QuotedStr(namee), QuotedStr(family)]);
オンラインヘルプによると:
「繰り返される」とは、私が「倍増」と呼んでいることです。それが重要であり、QuotedStrを使用する主な理由は、送信する値に O'Reilly のように一重引用符が含まれている場合に、SQLデータベースエンジンがエラーをスローしないようにするためです。 。
MySql Workbenchを使用して、その名前を含む行をテーブルに追加してみてください。そうすれば、私が何を意味するのかがわかります。
したがって、QuotedStrを使用すると、SQLステートメントをDelphiコードの文字列として作成することでエラーが発生しにくくなるだけでなく、バックエンドでの問題も回避できます。