c ++ builder:使用SELECT通过ADOQuery获取值

时间:2015-01-09 23:26:38

标签: sql-server delphi ado c++builder

问题与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();
}

1 个答案:

答案 0 :(得分:1)

ExecSQL仅用于不返回记录集的SQL语句,并用于确定您使用的结果RowsAffected

对于SELECT语句(返回记录集),您使用Open或将Active设置为true。

此外,count是大多数SQL方言中的保留字(如SELECT Count(*) FROM ...中所示),因此如果您有一个具有该名称的列,您将需要将其转义,通常是在其周围使用[]或双引号,或在SELECT本身使用别名。