MS Access - 取消报告创建的“幻像”流程

时间:2012-12-31 23:16:28

标签: vba ms-access

我在Access 2010 for Windows中遇到了问题:

  1. 使用doCmd.OpenReport
  2. 启动报告
  3. 设置"取消=真"在与报告相关的事件中
  4. 关闭访问
  5. 访问继续以"幻象"进程,必须在任务管理器中被杀死。在此过程被终止之前,Access无法打开另一个数据库。该任务最初显示一些CPU利用率,但安静下降到0%。
  6. 我在使用 doCmd.OpenReport 启动报告时发现了这一点。该报告会在 Report_Open 事件中打开一个表单。表单提示用户输入报告参数,并允许他们按"确定"显示报告或按"取消"。 &b;取消" 点击事件设置"取消=真"。

    似乎 OpenReport()没有正常响应取消。这似乎是一种经常使用的技术,所以我不敢称之为一个错误,我想知道我是否做错了什么。实际上......我解释的越多,听起来就像一个bug。在这一点上,我希望有人有一个解决方法,或者我错过了一些明显的东西。

    这只是我为解释问题而创建的简化示例:

    形式

    Private Sub Form_Open(Cancel As Integer)
    On Error GoTo errHandler
    
    DoCmd.OpenReport "Test Report", acViewPreview, , , acDialog
    
    Exit Sub
    
    errHandler:
    Select Case Err.Number
    Case 2501   ' Cancelled by user, or by NoData event.
        MsgBox "Report cancelled, or no matching data.", vbInformation, "Information"
    Case Else
        MsgBox "Error " & Err & ": " & Error$, vbInformation, "Form_Open()"
    End Select
    Resume Next
    
    End Sub
    

    报告

    Private Sub Report_Open(Cancel As Integer)
        Cancel = True
    End Sub
    

2 个答案:

答案 0 :(得分:4)

在这种情况下出现问题的原因是acDialog:

 DoCmd.OpenReport "Test Report", acViewPreview, , , acDialog

我想你会发现:

 DoCmd.OpenReport "Test Report", acViewPreview

没有问题。

编辑重新评论

您不需要取消报告。在大多数情况下,避免错误比捕获错误更好,因此在打开表单之前检查数据并获取参数。将表单从报表打开事件移动到自己的步骤,并在启动表单之前使用DLookUp或查询来检查数据。

答案 1 :(得分:0)

我无法测试此问题,所以我只提供一个通用的解决方案:从报告定义中删除数据/记录集/记录源。

确定参数后,您可以将记录源应用于报告。如果报告被取消,则会在没有数据连接的情况下取消报告。