我有一个表格,可以生成用于邮寄的报告。 该表单将打开一个包含所有所需字段的记录集。我想知道如何将此记录集传递给报表,这样我就不需要再次打开相同的记录集。
同样,有时我也想在表单之间传递记录集(没有主/子表单关系),我该怎么做?
另一个小问题,当我在数据 TableView 中打开表单时,它总是很大。如何限制打开时的大小?
谢谢!
编辑:
更清楚地说,假设我有“FORM”,当用户点击其上的按钮时,“Report”将打开。我希望“报告”使用“表单”中已创建(打开)的记录集。
还在“表单”上,有一个由用户填写的文本框,我也想在“报告”上显示它。
编辑2:
我累了,但无法传递记录集,也无法从表单上的文本框填充报告中的字段,非常烦人..
最佳答案
您应该能够通过简单地将正确的 SQL 语句传递到您的报告来完成此任务。这可以使用起始参数来完成。
假设您确实希望报告中的记录集与您在表单上看到的相同,那么您需要执行的操作取决于您打开表单的方式或过滤表单的方式。您确实可以使用相同的 DAO Recordset 对象并将报告 Recordset 对象设置为表单 Recordset 对象的副本或克隆。但是,这可能不是获得您想要的结果所必需的。
解决方案#1
如果您的表单使用查询或 SQL 语句,您可以使用此解决方案。
表单上的代码:
DoCmd.OpenReport "rptReportName", acViewPreview, , , acWindowNormal, Me.RecordSource
报告中的代码:
Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = Nz(Me.OpenArgs, "")
End Sub
解决方案#2
如果您的表单使用表单的筛选器属性来筛选到正确的记录集,请使用此解决方案。我假设您想将该过滤条件传递到报告中。您需要配置报告,以便它使用与表单相同的记录源(或者它必须至少包含将包含在过滤器语句中的表/字段)。问题在于,将报表的记录源传递到表单不会传递您可能在表单上设置的任何过滤器。
DoCmd.OpenReport "rptReportName", acViewPreview, , Nz(Me.Filter, ""), acWindowNormal
最后要注意的是,无法设置报表的记录集属性。您可以像我已经展示的那样分配记录源(记录源是表名、查询名或 SQL 语句),但不能使用 Recordset 属性,除非数据库是 Access 数据项目,我不建议在全部。
编辑1
从最初的帖子中并不清楚OP试图解决什么问题。我错误地认为他无法在报告中显示与表格中相同的记录。看来OP更关心的是两次 Access 服务器来检索记录。
由于您无法在 Access 报表上设置 Recordset 值,因此最好的选择可能是创建本地 Access 表并简单地将其用作临时表。我不知道您的记录集通常有多大。如果它很大(5000 多条记录),这个解决方案可能不是一个好主意。我能想到的一个问题是,它会导致您的前端数据库应用程序文件随着时间的推移而膨胀,除非您将文件设置为在关闭时运行压缩和修复。
关于ms-access - 在 from、report 之间传递记录集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5815820/