Vba 为报表输入重复的查询参数
我现在正在构建一个需要有多个聚合查询(主要是不同事物的总和和计数)的报告 我构建了一个主报表,并拥有包含每个查询的子报表。所有这些查询都有日期范围的参数(将是相同的) 因此,当我向上拉我的报告时,它会询问12次相同的参数(开始日期和结束日期)。什么是解决这个问题的有效方法 我计划使用的难看的解决方法(因为缺乏更好的解决方案)是让查询引用表单值。例如:Vba 为报表输入重复的查询参数,vba,ms-access,Vba,Ms Access,我现在正在构建一个需要有多个聚合查询(主要是不同事物的总和和计数)的报告 我构建了一个主报表,并拥有包含每个查询的子报表。所有这些查询都有日期范围的参数(将是相同的) 因此,当我向上拉我的报告时,它会询问12次相同的参数(开始日期和结束日期)。什么是解决这个问题的有效方法 我计划使用的难看的解决方法(因为缺乏更好的解决方案)是让查询引用表单值。例如: SELECT count(*) FROM tblTests WHERE testdate >= [Forms]![formReportPa
SELECT count(*) FROM tblTests
WHERE testdate >= [Forms]![formReportParams]![startDate]
AND testDate <= [Forms]![frmReportParams]![EndDate]
从tblTests中选择计数(*)
其中testdate>=[表单]![formReportParams]![开始日期]
和testDate您可以为开始日期和结束日期创建单独的函数,并在查询WHERE
子句中使用这些函数
Function GetStartDate(Optional ByVal pReset As Variant) As Date
Static dteStart As Date
If Not IsMissing(pReset) Then
dteStart = pReset
End If
GetStartDate = dteStart
End Function
初始化函数的静态日期值,它将一直作为返回值,直到您再次更改它。(但是,它仅在当前Access应用程序会话中保持。)
然后在查询中使用该函数
SELECT count(*) FROM tblTests
WHERE testdate >= GetStartDate();
对GetEndDate()
执行相同的操作我想您可以在运行报告之前将值存储在表中,然后对这些值执行dlookup。这不是真的那么干净,除非当你调试一个查询,你不必有一个特定的形式打开。为什么你认为一个形式邋遢?嗯,这不一定是草率,我只是不喜欢让用户浏览像3个窗体访问报告。我想当他们选择此报告时,我会显示一个表单,让他们输入日期参数,然后打开报告(在报告查询中引用表单上的控件)。我只是尽可能避免在表单上引用查询控件。有点不对劲。功能的日期从哪里来?我想你会发现一个表单很熟悉,也很容易控制。
SELECT count(*) FROM tblTests
WHERE testdate >= GetStartDate();