MS Access 2016:设置报表的 RecordSource 以从子窗体中获取数据

Posted

技术标签:

【中文标题】MS Access 2016:设置报表的 RecordSource 以从子窗体中获取数据【英文标题】:MS Access 2016: Set Report's RecordSource to get data from a Subform 【发布时间】:2018-08-08 22:01:36 【问题描述】:

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

我的情况:

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

Private Sub Report_Load()

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

End Sub

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

事实证明,我不需要加载任何旧数据,并且如果用户确实输入了加载旧数据的参数,我当前的参数查询会遇到问题 - 旧数据被传输到除了他们刚刚输入的新数据之外的报告。这是我目前使用的方法的主要问题,它破坏了这个表单和报告的几乎所有功能。用户需要输入查询旧数据的参数的事件很少,但它不是功能产品,除非我可以让子表单直接连接到报表。我可能在这里遗漏了一些明显的东西(或者至少,我希望有)。

提前感谢您抽出宝贵时间阅读本文以及您可能提供的任何帮助。

【问题讨论】:

这听起来像是设计问题,而不是代码错误。听起来您需要一个打印的标志 - 可能是一个日期字段。默认值为空。打印报告后,您将 DatePrinted 更新为当前日期和时间。您的报告只打印那些 DatePrinted 为空的记录。 【参考方案1】:

您可以在子表单中的单击事件之后通过打开报告事件将记录源发送到 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。

【讨论】:

以上是关于MS Access 2016:设置报表的 RecordSource 以从子窗体中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

在报表的文本框中按公式加粗部分文本 (ms Access 2016)

MS Access 多报告参数

MS Access - 在设计时添加未绑定字段

MS 访问报告

确定子表单/子报表是不是在 MS Access 中加载了表单或报表

基于另一个子报表的 MS Access 子报表过滤器