Microsoft Access报告 - 子报告有2页以上,但访问认为它是一个?

时间:2016-03-01 13:45:09

标签: vba ms-access report

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

基本上,我有一份显示商家详情的报告。其中一些细节包括:

  • 商家名称
  • 地址
  • 文档
  • 客户端

格式化报告(打印视图)时,会将商家名称及其相应的页码添加到表格中( BusinessPage )。这个代码放在第一个组头的'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"

该表格如下所示:

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

在报告标题中,我有两件事:

  • 封面
  • 索引子报告/页

索引页面(子报告)从表格中获取信息( BusinessPage ),并列出报告中的所有商家以及他们开始的页码。

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

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

例如,当子报告占用一页时:

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

子报告/索引页面仍将显示:

Business 1                                    Page 3

它应该显示为:

Business 1                                    Page 4



有没有人知道如何纠正这个问题?我有一种感觉,可能是因为子报告在报告标题中(但我需要它,因为它只会在报告开头显示一次)。有没有其他方法可以创建辅助报告标题来测试这个理论?

让我知道是否有人想到任何其他解决方案!

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

我在想,也许用if语句决定子报告的大小,如果它是2页的长度,那么改变代码成为:

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

这仍然是一个非常粗制滥造的修复,我不知道如何编写if语句来计算页面长度

1 个答案:

答案 0 :(得分:1)

这里发生了什么(我想):

打开主报表时,BusinessPage为空,因此索引子报表的高度最小。

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

之后,使用原始页码生成索引 - 如果索引覆盖> 1页,则会出错。

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

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