【问题标题】:c++ builder: getting values via ADOQuery using SELECTc++ builder:使用 SELECT 通过 ADOQuery 获取值
【发布时间】:2015-01-09 23:26:37
【问题描述】:

问题在于 delphi 编码器和 c++ builder 编码器,因为我使用的是相同的组件。 我正在尝试通过数据库中的数据填充表单上的标签。我通过 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();
}

【问题讨论】:

  • 我很困惑。你有两个不同的问题吗?至于“未找到字段计数”,您确定该字段在您的数据库中吗?我们看不到您的数据库结构。
  • COUNT 是 SQL 中的保留字,因此您可能需要使用 "" 传递它: q->fieldByName("\"Count\"")->Value;不知道身份证是不是同样的问题。要检查的另一件事是 ADOQuery1 组件,也许您周围有不包含这些字段的 FieldDef?
  • 另外,您是否尝试过执行“q->Active = true”而不是 ExecSQL? IIRC ExecSQL 用于不返回数据集的查询(例如,UPDATE、DELETE 等)
  • @RodrigoGómez ID 没有保留,我一直在 SQL Server/ADO 中使用它。
  • 谢谢!简单地使用 q->Active 而不是 ExecSQL() 帮助了我。我仍然无法相信单个属性的更改可以完成所有艰苦的工作o_O

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:
    ADOQuery1->Close();
    ADOQuery1->SQL->Text= "SELECT * FROM reportTble WHERE (firstName =:firstName) " ;
    ADOQuery1->Parameters->ParamByName("firstName")->Value =  textBox->Text ;
    ADOQuery1->Open();
    

    这就是你可以使用ADOQuery的方法

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    猜你喜欢
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 2019-10-12
    • 2022-01-21
    相关资源
    最近更新 更多