在执行报表打开事件之前访问报表运行查询
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
,强制AdmReport
的Report_Open
过程等待用户在Admform
中输入日期值。
我的AdmForm
包含一个名为cmdOK
的命令按钮,它的单击事件以隐藏模式重新打开表单,这允许AdmReport
的Report_Open
过程继续进行。尽管AdmForm
现在已隐藏,但其文本框及其包含的值将可供AdmQuery
(AdmReport
的记录源)使用。
这里是命令按钮点击事件的代码。
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。 是的,我忽略了一些东西,但一旦我纠正它 - 它就像一个魅力......再次感谢!以上是关于在执行报表打开事件之前访问报表运行查询的主要内容,如果未能解决你的问题,请参考以下文章