在执行报表打开事件之前访问报表运行查询

Posted

技术标签:

【中文标题】在执行报表打开事件之前访问报表运行查询【英文标题】:Access Report Running Queries Before Executing Report Open Event 【发布时间】:2012-07-08 00:58:52 【问题描述】:

我有一个名为 AdmQuery 的查询、一个名为 Admform 的表单和一个名为 AdmReport 的报告。在 Admreport 的 Open_Event 中,我调用了 AdmForm 将开始日期和结束日期输入到两个未绑定的框,并使用它来执行查询并在报告中显示其结果。

这可行,但问题是当我运行报表时,报表上的查询和打开事件一起运行,因此表单本身与报表一起打开(最初没有数据)。因此我必须关闭报告,在表格上输入日期,然后通过表格上的另一个按钮预览报告,一切都很好。

有什么方法可以延迟访问报告仅在执行 Report_Open_Event 之后运行底层查询?

我使用 access 2003。

【问题讨论】:

【参考方案1】:

以对话模式打开AdmForm,强制AdmReportReport_Open过程等待用户在Admform中输入日期值。

我的AdmForm 包含一个名为cmdOK 的命令按钮,它的单击事件以隐藏模式重新打开表单,这允许AdmReportReport_Open 过程继续进行。尽管AdmForm 现在已隐藏,但其文本框及其包含的值将可供AdmQueryAdmReport 的记录源)使用。

这里是命令按钮点击事件的代码。

Private Sub cmdOK_Click()
    DoCmd.OpenForm Me.Name, acNormal, , , , acHidden
End Sub

这是我的AdmReport 版本背后的代码。我使用 Access 2007 对其进行了测试,但相信它也应该适用于 Access 2003。

Option Compare Database
Option Explicit

Const mcstrForm As String = "AdmForm"

Private Sub Report_Close()
    DoCmd.Close acForm, mcstrForm
End Sub

Private Sub Report_Open(Cancel As Integer)
    DoCmd.OpenForm mcstrForm, acNormal, , , , acDialog
End Sub

请注意,我为AdmReport 添加了一个Report_Close() 过程。目的只是关闭(现已隐藏)AdmForm

【讨论】:

我发现让表单保持打开和隐藏通常很有用,因为相同的日期可能用于各种报告或再次打印相同的报告。当然,这在很大程度上取决于应用程序。 谢谢各位,让我试试这个,我会回复你的!! 优秀。我阅读了您之前的评论,说它不适用于 Access 2003,因此使用 2003 进行了测试。现在我回来了,我看到您还发现它适用于 Access 2003。 是的,我忽略了一些东西,但一旦我纠正它 - 它就像一个魅力......再次感谢!

以上是关于在执行报表打开事件之前访问报表运行查询的主要内容,如果未能解决你的问题,请参考以下文章

无法打开水晶报表

使用报表事件处理程序运行函数

MS Access VBA:打开报表时,报表所依赖的查询完成后会触发啥事件?

对报表运行多个查询

报表自动化: 打开数据仓库的大门

使用更新的参数集无法从 VB 关闭或刷新访问报表