あなたの質問には、決定的な回答を得るのに十分な情報がありません。しかし、私は推測を推測することができます。
mark
が序数フィールドまたはブール値フィールドとして定義されており、ユーザーがTEdit
に適切な数値/ブール値を入力している場合にのみ表示されます。
ただし、mark
フィールドがテキストフィールドとして定義されている場合は、Text
の値を引用符で囲む必要があります。無効なSQL構文が生成されます。
Text
の値を'hello world'
と入力したとします。
Update Table1 set mark=hello world
あなたが代わりに引用符でテキスト値をラップする必要があります:あなたのオリジナルのSQL文が無効な構文である、次のようになってしまうでしょう
Update Table1 set mark='hello world'
または:
Update Table1 set mark="hello world"
例:
form1.ADOQuery1.SQL.Add('Update Table1 set mark=' + QuotedStr(Form1.Edit4.Text));
または:
form1.ADOQuery1.SQL.Add('Update Table1 set mark=' + AnsiQuotedStr(Form1.Edit4.Text, #34));
SQLインジェクション攻撃を避けるために(Ansi)QuotedStr()
のような機能を使用することが重要です。これは、入力テキスト内の埋め込み引用符文字がエスケープされたプロパティであることを保証することによって行われます。あなたはこの代わりのような何かをした場合はそれ以外の場合は、:
form1.ADOQuery1.SQL.Add('Update Table1 set mark="' + Form1.Edit4.Text + '"');
ユーザーが'"; <arbitrary SQL here>'
のようなテキスト値を入力し、データベースと本当に臭い大混乱でした。スタックオーバーフロー
form1.ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Add('Update Table1 set mark=:Mark');
form1.ADOQuery1.Parameters.ParamByName('Mark').Value := Form1.Edit4.Text;
form1.ADOQuery1.ExecSQL;
ようこそ:
より安全なアプローチではなく、パラメータ化クエリを使用して、ADOはあなたのための書式必要な任意のSQLを(
TADOQuery.ParamCheck
が真であることを確認してください)を処理できるようにすることです。 'mark'フィールドの実際のデータ型は何ですか?そして、あなたは 'Edit4'をどのような価値観に入れていますか? SQLがどのようにフォーマットされる必要があるかは大きく異なります。 –なぜブール値のような値にテキストフィールドを使用していますか?実際のバイト/ブール型ではなく、または少なくとも整数です。 –