Microsoft Access 报告 - 子报告超过 2 页,但 Access 认为它​​是一页?

Microsoft Access Report - Sub Report carries over 2 pages, but access thinks it is one?

我改写了标题和这个描述,因为最后一个没有多大意义。

基本上,我有一个显示业务详细信息的报告。其中一些详细信息包括:

设置报表格式(打印视图)后,公司名称及其对应的页码将添加到 table(BusinessPage)。这个的代码放在第一组header的'On Format'事件中,我把代码列在下面:

Dim RST As DAO.Recordset

Set RST = CurrentDb.OpenRecordset("BusinessPage", dbOpenTable)
RST.AddNew
RST![Business Name] = BUSName
RST![Business Page] = Me.Page
RST.Update
RST.Close

CurrentDb.Execute "SELECT DISTINCT * INTO t_temp FROM BusinessPage"
CurrentDb.Execute "DELETE FROM BusinessPage"
CurrentDb.Execute "INSERT INTO BusinessPage SELECT * FROM t_temp"
CurrentDb.Execute "DROP TABLE t_temp"

table 看起来像这样:

Business Name        Page No
Business 1           3
Business 2           4
Business 3           6 'This indicates that Business 2 spans over two pages as page 5 is skipped'
Business 4           7

在报告header中,我有两件事:

索引页(子报表)从 table(BusinessPage) 获取信息并列出报表中的所有业务以及页码他们开始。

现在您已经了解了它的工作原理,下面是我的问题: 如果子报告只占用一页,它就可以正常工作。我遇到的问题是当子报告列出了太多记录并且它转移到第二页时。出于某种原因,访问仍然认为子报表在一页上,即使它创建了另一页。尽管它这么认为,但包含代码 ([Page]) 的页脚显示正确。但是,显示总页数 ([Pages]) 的代码是错误的。在报告的最后,页脚会这样说: 第 50 页,共 49 页

我遇到的另一个问题是,当子报告超过一页时,添加到 table 的信息是错误的。添加的信息假设子报告仍在一页上。

例如子报表占一页时:

Page 1: Cover Page
Page 2: Sub Report/Index
Page 3: Business 1

子报表将正确显示:

Business 1                                    Page 3


当子报表占2页时:

Page 1: Cover Page
Page 2: Sub Report/Index
Page 3: Sub Report/Index
Page 4: Business 1

子report/index页面仍会显示:

Business 1                                    Page 3

而它应该显示为:

Business 1                                    Page 4



有人知道我该如何纠正这个问题吗?我有一种感觉,这可能是因为子报告在报告 header 中(但我需要它,因为它只会在报告开始时显示一次)。是否有另一种方法可以创建二级报告 header 来检验这一理论?

如果有人想到任何其他解决方案,请告诉我!

编辑: 我将子报告移到了它自己的 group/header 中,远离了报告 Header。 这并没有改变任何东西,access 仍然认为它显示在一个页面上,即使它不是。由于设计视图中子报表的大小,我有另一种预感认为它在一页上?在引入数据之前,设计视图中的子报表将适合一页,这可能是问题所在吗?我将如何解决这个问题?

我在想,也许是一个if语句来决定子报告结果有多大,如果是2页的长度,那么把代码改成:

RST![Business page] = Me.Page + 1

虽然这仍然是一个很糟糕的修复,我不确定我将如何编写 if 语句来计算页面的长度

这里发生了什么(我认为):

当主报表打开时,BusinessPage 是空的,因此您的索引子报表有一些最小高度。

然后 Access 看到您使用 [Pages],因此它必须准备整个报表,即运行所有页面的 Format 事件,将记录添加到 BusinessPage。在此期间,Access 仍采用最小子报表并相应地分配页码。

在生成索引之后,使用原始页码 - 如果索引涵盖 >1 页,这将是错误的。

所以我认为你应该这样做:

在打开报告之前(或者可能在 Report_Open 中),预填充 BusinessPage table 中将包含的所有记录,但使用虚拟页码(例如 0 ).
因此索引子报表将具有正确的高度,并且在 Format 事件中生成的页码应该是正确的。