Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 为报表输入重复的查询参数_Vba_Ms Access - Fatal编程技术网

Vba 为报表输入重复的查询参数

Vba 为报表输入重复的查询参数,vba,ms-access,Vba,Ms Access,我现在正在构建一个需要有多个聚合查询(主要是不同事物的总和和计数)的报告 我构建了一个主报表,并拥有包含每个查询的子报表。所有这些查询都有日期范围的参数(将是相同的) 因此,当我向上拉我的报告时,它会询问12次相同的参数(开始日期和结束日期)。什么是解决这个问题的有效方法 我计划使用的难看的解决方法(因为缺乏更好的解决方案)是让查询引用表单值。例如: SELECT count(*) FROM tblTests WHERE testdate >= [Forms]![formReportPa

我现在正在构建一个需要有多个聚合查询(主要是不同事物的总和和计数)的报告

我构建了一个主报表,并拥有包含每个查询的子报表。所有这些查询都有日期范围的参数(将是相同的)

因此,当我向上拉我的报告时,它会询问12次相同的参数(开始日期和结束日期)。什么是解决这个问题的有效方法

我计划使用的难看的解决方法(因为缺乏更好的解决方案)是让查询引用表单值。例如:

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();