The solution is so simple yet not so immediately evident.
Looking at the generated refresh SQL (via a TZSQLMonitor) the joined table it's evident the parameter is not working:
2014-01-04 11:19:38 cat: Execute, proto: mysql-5, msg: 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 = NULL
WHERE pr.status = 1 ORDER BY pd.name
The parameter bit is:
pd.language_id = NULL
A quick glance to the ClientDataSet component would reveal that the parameter name has been captured from the query component. But not the value.
Now, I don't know if this is a problem with the TZQuery component not sending the parameter value at runtime or if the functionality is just not implemented by the ClientDataSet but the errors it generates are far from immediately evident.
The fix, of course, is to manually set the parameter value both in the TZQuery and in the TClientDataSet components before Active is set to true.