我已经改写了标题和这个描述,因为最后一个没有多大意义。
基本上,我有一份显示商家详情的报告。其中一些细节包括:
格式化报告(打印视图)时,会将商家名称及其相应的页码添加到表格中( 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语句来计算页面长度
答案 0 :(得分:1)
这里发生了什么(我想):
打开主报表时,BusinessPage
为空,因此索引子报表的高度最小。
然后,Access会看到您使用[Pages]
,因此必须准备整个报告,即所有网页运行的Format
事件,并将记录添加到BusinessPage
。在此期间,Access仍假定最小子报表并相应地分配页码。
之后,使用原始页码生成索引 - 如果索引覆盖> 1页,则会出错。
所以我认为你应该这样做:
在打开报告之前(或者可能在Report_Open
中),在BusinessPage
表中预先填入所有记录,但是有一个虚拟页码(例如0)。
因此索引子报表将具有正确的高度,并且Format
事件中生成的页码应该是正确的。