c++ 构建器:使用 SELECT 通过 ADOQuery 获取值

c++ builder: getting values via ADOQuery using SELECT

问题是关于 delphi 编码器和 C++ 构建器编码器的问题,因为我使用的是相同的组件。 我正在尝试通过数据库中的数据在表单上填写标签。我通过 TADOQuery 进行 SELECT 查询。但是当我试图得到一个结果时,我总是得到像 "ADOQuery1: Field 'count' not found" 这样的错误。 'id' 传递给函数的是一个自动增量字段值,它完全存在于数据库中(它是通过 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();
}

ExecSQL 仅用于 SQL 没有 return 记录集的语句,并确定您使用 RowsAffected.

的结果

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

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

ADOQuery1->Close();
ADOQuery1->SQL->Text= "SELECT * FROM reportTble WHERE (firstName =:firstName) " ;
ADOQuery1->Parameters->ParamByName("firstName")->Value =  textBox->Text ;
ADOQuery1->Open();

这就是您可以使用的方式 ADOQuery