首页 > 解决方案 > 在访问表单中使用查询结果的问题

问题描述

SELECT ProductData.ShiftStart, ProductData.ExtrusionLine, Avg(ProductData.RollDensity) AS AvgOfRollDensity, StDev(ProductData.RollDensity) AS StDevOfRollDensity
FROM ProductData
GROUP BY ProductData.ShiftStart, ProductData.ExtrusionLine
HAVING (((ProductData.ShiftStart)=[Forms]![RollRelease]![ShiftStart]) AND ((ProductData.ExtrusionLine)=[Forms]![RollRelease]![Line]));

如果我打开“RollRelease”表单,输入数据,然后使用“RollRelease”运行“qryRollDensity”,则打开查询。当我尝试通过 select 语句使用查询时,出现不匹配错误或缺少参数错误等。最终,我需要表单中的 AvgOfRollDensity 和 StDevOfRollDensity 的值,以便进行一些计算。

标签: vbams-access

解决方案


在聚合之前使用 WHERE 而不是 HAVING 过滤记录。

动态查询参数不会传递到 VBA 记录集 SQL 语句。

一种选择是在表单的文本框中使用域聚合函数;查询上的 DLookup() 表达式或具有 WHERE 条件的原始数据表上的 DAvg() 和 DStDev()。假设 ShiftStart 和 ExtrusionLine 是文本类型字段:

=DAvg("[RollDensity]", "ProductData", "[ShiftStart] = '" & Me.ShiftStart & "' AND [ExtrusionLine] = '" & Me.Line & "'"
=DStDev("[RollDensity]", "ProductData", "[ShiftStart] = '" & Me.ShiftStart & "' AND [ExtrusionLine] = '" & Me.Line & "'"

否则,请删除撇号并改为使用 # 分隔符作为日期/时间字段,而不使用分隔符作为数字类型。


推荐阅读