【发布时间】: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