我有一个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显示所有客户的所有注释。 在日志消息中,从上面的代码中,我可以看到查询似乎正确地完成了它的工作。
关于出了什么问题的任何想法?
答案 0 :(得分:0)
由于查询结果仅包含由param正确过滤的注释,因此该查询不可能是向列表框提供数据的查询。
因此,答案可能是您错误配置了DBLookupListBox并为其分配了另一个数据源,一个指向不过滤您的笔记的查询。
当您分配参数值并打开查询时,我们也无法看到customerNotesQ是否真的关闭了。但如果没有,那么参数就没有效果了。