【问题标题】:MS Access - Parameters from report in VBAMS Access - VBA 中报告的参数
【发布时间】:2017-03-26 16:51:19
【问题描述】:

如果您基于带有某些参数(例如 StartDate 和 EndDate)的查询打开报告,我知道我可以在报告中将这些参数用作 [Reports]![ReportName]![StartDate]。但现在我想在 VBA 函数中使用这些参数,但使用相同的表达式对我不起作用:

MsgBox [Reports]![Test]![StartDate]

这给了我错误:

运行时错误“2465”:Microsoft Access 找不到该字段 您的表达式中提到的“StartDate”。

【问题讨论】:

    标签: sql ms-access parameters vba


    【解决方案1】:

    它永远不会找到它。

    我从不使用动态参数化查询。我使用表单上的控件来选择过滤条件并引用 OpenReport 命令的 WHERE 参数中的控件(对于 OpenForm 也是如此)。

    DoCmd.OpenReport "Test", , , "[StartDate] = #" & Me.tbxStart & "#"
    MsgBox = Me.tbxStart

    或者如果你真的更喜欢动态参数——报表查询参数可以参考表单控件。

    VBA 代码不会找到参数,但它可以在报告中找到引用该参数的文本框并以这种方式提取参数值。

    【讨论】:

    • 非常感谢!但是查询已经这样写了,所以我实际上需要使用动态参数。你知道如何在 Report_Load() 事件中使用这个参数吗?
    【解决方案2】:

    如果您的报表或表单将查询作为其记录源,您可以将查询的字段(如StartDate)绑定到报表或表单上的控件,并获取值通过引用控件在 VBA 函数中的该字段。例如,假设您有一个名为 DateReport 的报告。如果DateReport 的记录源包含StartDate 字段,那么您可以在报表上创建一个文本框——我们称之为StartDateBox——并将其控制源设置为“StartDate”。然后在 VBA 中,您可以使用Report_DateReport.StartDateBox 获取当前记录的该字段的值。可能有另一种方法来引用表单或报表的记录源字段值而不将它们绑定到控件,但我现在没有可用的 MS Access 来测试这一点。

    【讨论】:

      【解决方案3】:

      您可以通过使用公共变量并动态更改记录源的sql来做到这一点。

      您可以在调用报表之前将参数值存储在公共变量中。

      首先在模块中声明一个变量 例如,Public filtDate as Date

      其次,在运行报表之前将参数值赋给filtDate

      然后,在report的report_open事件中修改records source的sql

      Private Sub Report_Open(Cancel As Integer)
      Me.RecordSource = "SELECT * FROM Test WHERE [StartDate] = #" & filtDate & "#"
      MsgBox  filtDate
      End Sub
      

      这里是动态设置recordsource的sql,可以直接使用参数值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多