【问题标题】:Entering duplicate query parameters for report为报表输入重复的查询参数
【发布时间】:2012-11-10 03:42:18
【问题描述】:

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

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

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

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

SELECT count(*) FROM tblTests 
WHERE testdate >= [Forms]![formReportParams]![startDate] 
    AND testDate <= [Forms]![frmReportParams]![EndDate]

是否有一个不那么草率的解决方案,允许我的单独子报表的所有查询共享相同的查询参数?

【问题讨论】:

  • 我想您可以在运行报告之前将值存储在表中,然后对这些值进行 dlookup。这实际上并没有那么干净,除非您在调试查询时不必打开某个特定的表单。
  • 为什么你认为表格草率?
  • 好吧,这不一定是草率,我只是不喜欢让用户浏览 3 个表单来访问报告。我想当他们选择此报告时,我将显示一个表单供他们输入日期参数​​,然后打开报告(在报告查询中引用表单上的控件)。我只是倾向于尽可能避免让我的查询引用表单上的控件。感觉有些不对劲。
  • 函数的日期从何而来?我想你会发现一个表单是熟悉且易于控制的。

标签: vba ms-access


【解决方案1】:

您可以为开始日期和结束日期创建单独的函数,并在查询 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 应用程序会话中持续存在。)

GetStartDate #2012-01-01#

然后在您的查询中使用该函数。

SELECT count(*) FROM tblTests 
WHERE testdate >= GetStartDate();

GetEndDate() 执行相同操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多