首页 文章

MS Access 2016:设置Report的RecordSource以从子表单获取数据

提问于
浏览
0

是否有某种解决办法可以使这成为可能?或者,有人可以提供一些关于我的情况的一般建议吗?我试图通过VBA设置记录源,但没有运气 .

我的情况:

我有一个主窗体,其中包含一个子窗体,我希望子窗体纯粹用于数据输入(数据输入=是) . 单击按钮后,用户将从主窗体发送到报告(仅打印预览) . 我希望此报告的源是用户输入数据的子表单,但我没有从报告的属性表本身(没有表单)中选择此选项,我也无法通过VBA设置它 . 这是我的代码,它是一行,所以我非常怀疑这是问题所在 .

Private Sub Report_Load()

    Reports![P18003 SDR Report].RecordSource = "P18003 SDR Subform"

End Sub

以前,为了解决这个问题,我有一个参数查询,等待用户从主窗体中将数据输入到未绑定的文本框中,并且该文本框上的更新后触发器将加载与该参数相关的任何数据(我的雇主和我错误传达了要求) .

事实证明,虽然我不需要加载任何旧数据,但如果用户确实输入了加载旧数据的参数,那么我的当前参数查询会遇到问题 - 旧数据会传输到报表中除了他们刚刚输入的新数据外 . 这是我目前使用的方法的主要问题,它使用此表单和报表来破坏几乎所有功能 . 用户输入查询旧数据的参数所需的事件很少,但它不是功能性产品,除非我可以将子表单直接连接到报表 . 这里可能有一些显而易见的东西(至少,我希望有) .

提前感谢您花时间阅读本文以及您可能提供的任何帮助 .

1 回答

  • 0

    在子窗体中的click事件之后,您可以通过打开的报表事件将记录源发送到OpenArgs中的报表本身

    Private Sub btnSubform_Click()
    
    Dim strSQL as String
    strSQL = "SELECT * FROM SubformQuery WHERE ID = " & CurrentSubfromRecordID
    Docmd.OpenReport, acViewReport, , , , strSQL
    
    End Sub
    

    然后在报告中 .

    Private Sub Report_Open(Cancel As Integer)
    Me.recordsource = Me.OpenArgs
    End Sub
    

    或者,您可以创建参数查询并将此查询条件设置为报告的记录源 . 因此查询中的参数指向子表单中当前选定的行 . 像这样:

    --- At the Criteria in the Query designer:
    --- RecordSource for the Report:
    Forms![FormMain]![YourSubform]![ID]
    

    现在每次报告都会显示,他会从您子表单的当前所选记录中获取ID .

相关问题