TSQLQuery和数据感知组件的更新

时间:2016-06-16 16:24:41

标签: c++ sql vcl dbexpress

我有一个sqlite数据库,其中包含客户的“注释”。数据库设计非常简单,包括一个用于注释的表,一个“链接”表,链接,关联名为customer_note的客户和注释以及一个customers表。 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显示所有客户的所有注释。 在日志消息中,从上面的代码中,我可以看到查询似乎正确地完成了它的工作。

关于出了什么问题的任何想法?

1 个答案:

答案 0 :(得分:0)

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

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

当您分配参数值并打开查询时,我们也无法看到customerNotesQ是否真的关闭了。但如果没有,那么参数就没有效果了。