【发布时间】:2014-01-04 12:01:00
【问题描述】:
有时,即使是显而易见的事情似乎也会出错。在处理 SQL 组件时,有很多明显的和肯定会出错的地方,当它们只是整个 SQLQuery => Provider => ClientDataSet => DataSource => DataControl 链的环时,甚至更多。
今天的例子非常愚蠢,但却是浪费时间。
如何复制它:
在其 SQL 中删除一个带有简单参数连接的 TZQuery (ZeosLib),例如:
SELECT
pr.product_id AS product_id,
pr.model AS model,
pd.name AS name,
pr.image AS image,
pr.status AS status,
pr.date_added AS date_added,
pr.date_modified AS date_modified
FROM oc_product pr
LEFT JOIN oc_product_description pd
ON pr.product_id = pd.product_id AND pd.language_id = :language_id
WHERE
pr.status = 1
ORDER BY
pd.name
当然我们有一个参数,:language_id。
然后删除一个链接到它的 TDataSetProvider,然后是一个 TClientDataSet,然后是一个 TDataSource,最后是一个 TDBGrid,所有这些都链接到前一个。最后删除一个 TDBNavigator 并链接它。
最后,在 TClientDataSet 中添加字段、标题等
在程序启动时,我们将参数分配给 TZQuery 组件,如下所示:
qryProduct.Params.ParamByName('language_id').AsInteger := 2;
其中 2 是一个演示硬编码值(在实际应用程序中,它是通过查询正在使用的 Windows 当前语言来确定的)。
现在运行应用程序:完美!
现在按 TDBNavigator 上的“刷新”。
在 TDBGrid 中,要么你得到一个讨厌的:“密钥违规”,要么是一个完全空白的 name 列。
为什么?
【问题讨论】:
标签: sql delphi join tclientdataset