【问题标题】:Access Report - show current recordsource of another form访问报告 - 显示另一种形式的当前记录源
【发布时间】:2016-04-16 13:43:06
【问题描述】:

我有一个显示另一个表单的记录源的报告。当我在此表单上添加一些记录并单击报告时,此记录未显示。如何实现始终显示屏幕上的内容?这是我的简单报告代码:

Private Sub cmdOpenReport_Click()

   DoCmd.OpenReport "MyReport", acViewReport

End Sub

Private Sub Report_Open(Cancel As Integer)

   Me.RecordSource = Forms![MyForm].Form.RecordSource

End Sub

【问题讨论】:

  • 我很困惑。表格不是已经显示了上面的内容吗?为什么需要报告?此外,请检查 Me.RecordSource 以确保您请求的数据正确。
  • 我有一个表格。当我打开它时,它里面有一些记录。如果我单击报告按钮,则会显示这些记录。但是,如果我输入一条新记录(以连续形式)然后再次单击报告按钮,则不会显示这条新记录 - 这就是问题所在。我需要一份用于打印、发送电子邮件、制作 PDF 的报告...

标签: ms-access vba


【解决方案1】:

您需要在重新打开之前关闭报告并保存新记录。

在打开报告按钮的点击事件中插入以下内容:

Private Sub OpenReport_Click()

    DoCmd.RunCommand acCmdSaveRecord
    DoCmd.Close acReport, "Test1", acSaveYes
    DoCmd.OpenReport "Test1", acViewPreview

End Sub

【讨论】:

  • 不,这不起作用,不幸的是表单的记录源仍然与加载时保持相同。
  • 也许问题是因为这个表单的记录源首先是通过“搜索”表单打开的?然后,当您添加新记录时,记录源保持不变?我也应该发布该代码吗?
  • 这应该可以。我用连续形式对其进行了测试。我确实错误地指定了“打开表单”按钮,但我指的是“打开报告”按钮。
  • 不,它没有,我想我知道现在问题出在哪里。我没有提到一件事——有记录的表单实际上是一个通过 SQL 语句显示结果的表单。因此,当带有记录的表单打开时,它的记录源是通过 SQL 子句定义的。并且看起来一旦你设置了记录源,你就无法重置它并像在屏幕中一样使用记录源。
  • 我不认为记录源有什么不同。表单上的“打开报告”按钮是否要显示报告结果?请提供您认为相关的任何代码或属性。
【解决方案2】:

尝试在打开报表之前重新查询您的表单记录集:

Private Sub cmdOpenReport_Click()
   Me.FilterOn = False
   Me.Requery
   DoCmd.OpenReport "MyReport", acViewReport
End Sub

【讨论】:

  • 这个不行,我之前已经试过了。重新查询从屏幕上删除最后保存的记录,报告仍然不能正确显示。
  • 当您说:“可能问题是因为此表单的记录源首先是通过“搜索”表单打开的?”时,我想我们知道了为什么这不起作用。我不是 100% 确定您的“搜索”表单使用的是什么方法,但我想它是一个过滤器。因此,请参阅上面我修改后的答案。
  • 是的,你是对的,它是一个过滤器,但是一个 SQL 过滤器 - 无论我在 Texboxes 中输入什么,如果有匹配项,我的表单就会打开。我以为这不重要,但现在我明白了。您的代码不起作用,它向我显示来自 Table 记录源的所有记录,尽管包括新记录。
  • 如果它是一个 SQL 过滤器,您必须找到一种方法来清除它。如果您在搜索表单中使用了表单过滤器,它可能会简化它,因为您可以像我上面的示例一样清除它......然后在需要时重新申请。
【解决方案3】:

我有一个答案,我知道这并不容易(在 OpenReport 按钮的点击事件中):

Dim strWhere As String

    Me.Dirty = False

    With Me.Recordset.Clone
        Do Until .EOF
            strWhere = strWhere & "," & !ID
            .MoveNext
        Loop
    End With
    strWhere = Mid(strWhere, 2)
    DoCmd.OpenReport "MyReport", acViewReport, WhereCondition:="ID In (" & strWhere & ")

由 Leigh Purvis(Access MVP)提供的答案,再次非常感谢!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    相关资源
    最近更新 更多