【问题标题】:TSQLQuery and update of data aware componentsTSQLQuery 和数据感知组件的更新
【发布时间】:2016-06-16 16:24:41
【问题描述】:

我有一个包含客户“笔记”的 sqlite 数据库。数据库设计非常简单,包括一张便笺表、一个“链接”表、链接、关联客户和名为 customer_note 的便笺以及一个客户表。 notes 表有一个 id 字段,customer_note 有 customer_id 和 note_id(一对多),customers 表也有一个 id。

获取所选客户备注的查询是:

SELECT * FROM note n 
INNER JOIN customer_note cn 
ON (cn.note_id = n.id) 
WHERE customer_id = :customerID 
ORDER BY created_on ASC

在客户客户端数据集滚动的事件中执行查询,即

customersCDSAfterScroll()
{
int cID = customerCDS->FieldByName("id")->AsInteger;
customerNotesQ->Params->ParamByName("customerID")->AsInteger = bID;
customerNotesQ->Open();

//Get notes
string note = stdstr(customerNotesQ->FieldByName("note")->AsString);
Log(lInfo) << "Note is: "<<note;
customerNotesQ->Close();

}

查询由 DataSetProvider、ClientDataSet 和 DataSource 组件引用。在 UI 上,一个 TDBLookupListbox 正在接收数据。

问题是,TDBLookpListbox 显示所有客户的所有注释。 在日志消息中,从上面的代码中,我可以看到查询似乎正确地完成了它的工作。

知道出了什么问题吗?

【问题讨论】:

    标签: c++ sql vcl dbexpress


    【解决方案1】:

    由于查询结果仅包含由参数正确过滤的注释,因此此查询不可能是向列表框提供数据的查询。

    因此,答案可能是您错误配置了 DBLookupListBox 并为其分配了另一个数据源,该数据源指向一个不过滤您的笔记的查询。

    此外,当您分配参数值并打开查询时,我们无法看到 customerNotesQ 是否真的关闭。但如果不是,则参数将不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      相关资源
      最近更新 更多