0

このコードは C++Builder にあります。

void __fastcall TForm1::Button1Click(TObject *Sender)
{

AnsiString am="2323246";

   Form1->ADOQuery1->SQL->Text="SELECT T_ID FROM TABLE WHERE TABLE.T_AM='"+am+"'";

   Form1->Edit1->Text=Form1->ADOQuery1->ExecSQL();

}

amに他の値を試しても、編集ボックスの結果として常に-1が返されます。値はデータベースに存在し、データベースでクエリを実行しようとすると、問題なく動作し、正しい ID が返されます。

4

1 に答える 1

0

T_AM の変数の型は何ですか? 整数または浮動小数点の場合は、引用符を失います。また、準備されたクエリまたはステートメントを見てください。このタイプのクエリは、SQL インジェクションに対して脆弱です。例:

PrepareSQL("SELECT T_ID FROM TABLE WHERE T_AM = %d", am);
ExecSQL();

これを行うための正確なセマンティクスと構文については、API ドキュメントを確認する必要があります。

API を見ると、次のようにする必要があります。

VARIANT vName;
vName.vt = VT_BSTR; //Variant type for BSTR
vName.bstrVal = _bstr_t("2323246");

Form->ADOQuery1->Parameters->Append(
    Form->ADOQuery1->CreateParameter(_bstr_t("T_AM"),adChar,adParamInput,50,vName)
);
于 2013-07-03T10:34:35.203 に答える