У меня есть этот код в 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();
}
Он всегда возвращает -1 как результат в окне редактирования, даже если я попытался другое значение для
есть. Значения существуют в моей базе данных, и если я пытаюсь выполнить запрос в моей базе данных, это работает
просто отлично и возвращает правильный идентификатор.
Какой тип переменной 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)
);
Других решений пока нет …