自动运行查询报告

时间:2018-02-04 12:46:50

标签: ms-access

我有一个从表单运行的查询。该表单使用组合框供用户选择导致查询运行的参数。我真正想要的是自动运行该查询的报告。这是我必须从表单激活查询的事件代码:

Private Sub EmpName_AfterUpdate()

DoCmd.OpenQuery "TrainingRecords", acViewNormal, acEdit

DoCmd.Close acForm, "EmployeeTrainingRecords"

End Sub

更明白现在的做法:

  1. 用户打开表格TrainingRecords
  2. 用户从组合框中选择名称
  3. 查询运行并显示该员工完成的培训列表
  4. 表单自行关闭
  5. 我想要什么

    1. 用户打开“培训记录”表单
    2. 用户从组合框中选择名称
    3. 用户选择"运行"按钮
    4. 表格关闭
    5. 用户会看到一份报告,其中包含该员工完成的培训列表
    6. 显然,查询必须在那里的某个地方运行,但我不知道如何在没有用户看到所有内容的情况下运行查询来创建报告。

1 个答案:

答案 0 :(得分:1)

你实际上已经走上了正轨 你只需要稍微改变一下你的想法......

查询不需要来自Form。报告可以“拥有”查询,您只需告诉它即可。这包括能够发送您的参数值。

有很多方法可以做到这一点。评论中经验丰富的人员提供的链接非常简单......

  • DoCmd.OpenReport

如果您首先创建报告,忽略其查询中的任何“Where”子句,您只需在DoCmd.OpenReport中添加“Where”... 他们很容易: - )。

所以基本的例子是:

'--- variable for holding the parameter ---
Dim strMyParameter As String

'--- Get the parameter value from a combobox on this current form ---
strMyParameter = Me.cbxMyComboBox.Value

'--- Use the value in opening the report in a new window ---
DoCmd.OpenReport "myReport", acViewPreview, Null, "ID=" & strMyParameter, acWindowNormal, Null  

其中
  - 第一个参数是MS Access中报告的名称
  - 第二个是你想看到它(我把它作为上面的打印预览)
  - 第三个是初始记录过滤器子句,我忽略了“Null”

  • ,第四个是我们的 Where 子句,强制名为“ID”的列与组合框中的值匹配。

- 第五个是一个窗口状态,你可以在大多数情况下作为acWindowNormal留下 - 最后一个是你不需要的特殊参数对象,也被忽略了“Null”

Here is the MSDN page for this particular function

And here is the link to an SO page with almost but not quite the same Question,由@ashleedawg在最初的评论中分享 它包括许多讨论和其他一些方法,以及