是否存在某种变通办法可以实现这一目标?还是有人可以就我的情况在下面提供一些一般性建议?我试图通过VBA设置记录源,但是没有运气。
我的情况:
我有一个包含子窗体的主窗体,我希望该子窗体仅用于数据输入(数据输入=是)。单击按钮后,会将用户从主表单发送到报告(仅打印预览)。我希望此报告的来源是用户要向其中输入数据的子表单,但是我在报告的属性表本身(没有表单)中没有此选项,而且我也无法通过VBA进行设置。这是我的代码,只有一行,所以我高度怀疑这是问题所在。
Private Sub Report_Load()
Reports![P18003 SDR Report].RecordSource = "P18003 SDR Subform"
End Sub
以前,要解决此问题,我有一个参数查询,等待用户将数据从主表单输入到未绑定的文本框中,并且该文本框上的更新后触发器将加载与该参数相关的所有数据(我雇主和我误解了要求)。
事实证明,虽然我不需要加载任何旧数据,但是如果用户确实输入了加载旧数据的参数,则我当前的参数查询会遇到问题-旧数据将传输到报告以及他们刚刚输入的新数据。这是我当前使用的方法的主要问题,并且此表单和报表几乎破坏了所有功能。用户需要输入查询旧数据的参数的事件很少,而且相差甚远,但这不是功能性产品,除非我可以将子表单直接连接到报表。我可能在这里可能缺少某些东西(或者至少,我希望有)。
在此先感谢您抽出宝贵的时间阅读本文档以及您可能会提供的任何帮助。
答案 0 :(得分:0)
在子窗体中的click事件之后,您可以通过open report事件将记录源发送到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。