问题与delphi编码器和c ++构建器编码器一样,因为我使用相同的组件。 我试图通过数据库中的数据填充表单上的标签。我通过TADOQuery进行SELECT查询。但是当我试图得到一个结果时,我总会得到一个像" ADOQuery1:Field' count'找不到"。 ' ID'传递给函数的是一个autoincrement字段值,它完全存在于数据库中(它是通过DBLookupComboBox获得的)。此外,手动执行查询以在DBGrid中显示结果是成功的。 查询没有参数和写'id'查询字符串的值也失败了。 问题是什么?这是代码。
void TSellForm::LoadData(int id) {
TADOQuery* q = DataModule1->ADOQuery1;
q->Active = false;
try
{
q->SQL->Text = "select * from drugs where(id=:id)";
q->Parameters->ParamByName("id")->Value = IntToStr(id);
q->ExecSQL();
this->LabelAvail->Caption = q->FieldByName("count")->Value;
}
catch (Exception* e) {
MessageBox(NULL, PChar(WideString(e->Message)),
L"Exception", MB_OK|MB_ICONWARNING);
}
q->SQL->Clear();
}
答案 0 :(得分:1)
ExecSQL
仅用于不返回记录集的SQL语句,并用于确定您使用的结果RowsAffected
。
对于SELECT
语句(返回记录集),您使用Open
或将Active
设置为true。
此外,count
是大多数SQL方言中的保留字(如SELECT Count(*) FROM ...
中所示),因此如果您有一个具有该名称的列,您将需要将其转义,通常是在其周围使用[]
或双引号,或在SELECT
本身使用别名。