设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

123下一页
返回列表 发新帖
查看: 10109|回复: 23

[报表] 【Access小品】并驾齐驱--双列报表

[复制链接]
发表于 2011-11-30 18:52:16 | 显示全部楼层 |阅读模式
本帖最后由 todaynew 于 2011-11-30 18:59 编辑

  版友简希望能在一张报表上分左右两个区域打印统一数据源的报表,这个问题稍有些复杂。其基本的算法就是将记录分出页来,比如说每20行为一页,只要能分出这样的页来,就可以用mod计算出左右两个查询。同样的道理,也可在此基础上分出三列或者更多的并列的页面了。分出若干的查询后便只是做几个子报表,以及报表的美化了,这不是本问题的重点。本例的视频是实例完善前录制的,更新后的实例,对报表进行了进一步美化。

      分页可以用一个自定义函数来进行计算,也就是计算记录的顺序号处于第几页:

Function p(num As Long, row As Long) As Long
'参数:num--记录的顺序号,row--页的记录总数
Dim i As Long
For i = 1 To 1000
    If num <= i * row Then
        p = i
        Exit For
    End If
Next
End Function


  



  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

本帖被以下淘专辑推荐:

发表于 2011-11-30 20:43:47 | 显示全部楼层
老汉,我看了,原来你是采用子报表的方式。

我想提两点问题,你是采用挨个选择客户来进行打印的,如果客户单位较多,这种方式是个好方法。但我这里有个情况,客户单位近二十个,可不可以在报表中对客户分组,并且不同客户不同页的方式来进行打印呢,这样一气呵成,也能提高效率。

还有个问题,在生成报表时,序号可以根据客户单位的不同,从1开始,自动编号呢。比如说,中国银行,其明细记录的序号从1开始,12345……,然后建设银行,其明细记录的序号也是按12345……自动编号呢~~~
 楼主| 发表于 2011-11-30 21:00:35 | 显示全部楼层
本帖最后由 todaynew 于 2011-11-30 21:04 编辑
简 发表于 2011-11-30 20:43
老汉,我看了,原来你是采用子报表的方式。

我想提两点问题,你是采用挨个选择客户来进行打印的,如果客 ...


1、不选择客户即可分客户全部一次性打印。

2、将子报表中的【销售序号】字段的控件来源,更换为count(这是我在查询中已经设计好的字段),即可显示出连续的序号。

3、给你留一个自学问题。目前是将所有记录不分年度或者月度进行报表输出的,但实际应用中统计报表是需要有统计期间的。那么,如果按年度(或者月度)分客户打印该如何处理呢?
发表于 2011-12-1 09:11:36 | 显示全部楼层
类似报表分列的
发表于 2011-12-1 09:41:34 | 显示全部楼层
{:soso_e199:}
发表于 2011-12-1 11:09:52 | 显示全部楼层
学习
发表于 2011-12-1 11:38:28 | 显示全部楼层
老汉,我把你这个运行在我的数据库上,由于我的记录非常多,一个月好几千条,运行时就非常慢,报表生成不出来,甚至于死机。我分析原因,应该在你的查询count和页字段上。因为几千条记录,这两个字段分析也要用很长的时间,如果记录少,都还好办。当然也有可能是我哪里没有设置好。我想问,有没有更简单,效率更高的方法呢?

还有一个问题,count的内容能不能转成文本型,这样我好根据count来隔行显示不同的颜色。还有根据count内容排序也有个问题,它是按1,10,111这样来排序的,能不能按12345……这样来排序呢。
 楼主| 发表于 2011-12-1 14:05:04 | 显示全部楼层
简 发表于 2011-12-1 11:38
老汉,我把你这个运行在我的数据库上,由于我的记录非常多,一个月好几千条,运行时就非常慢,报表生成不出 ...

你对count字段的想法似乎是矛盾的。

其实不必转为文本,用数字型更容易进行隔行显示的控制,只需要用count mod 2的值(为0或者为1)即可进行条件格式设置了。

关于计算速度问题,我在看看是否有优化的可能,一会告诉你。
 楼主| 发表于 2011-12-1 14:26:04 | 显示全部楼层
简 发表于 2011-12-1 11:38
老汉,我把你这个运行在我的数据库上,由于我的记录非常多,一个月好几千条,运行时就非常慢,报表生成不出 ...



在明细表中增加了一个count字段。目前的处理是在打印时先对该字段进行一个更新查询,然后再打印报表。这个速度可能依然会比较慢。

如果想根本性解决这个问题,就需要在数据的录入和编辑页面来处理count字段。也就是说在录入或者修改数据时,对当前记录的count字段进行更新查询。这个方法是将count字段的处理时间前移到录入修改过程中,并且由于只是对当前的一条记录做这个工作,因此上便不会有慢的感觉了,在打印输出的时候也不再需要对该字段进行处理了。具体的实现方法,你自己摸索着做一下。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2011-12-1 23:12:45 | 显示全部楼层
todaynew 发表于 2011-12-1 14:05
你对count字段的想法似乎是矛盾的。

其实不必转为文本,用数字型更容易进行隔行显示的控制,只需要用c ...

用数字型是可以进行隔行显示,但有个问题,数字型在排序上,是按照1,11,111,1111这样的顺序来排列的,而不是按照1,2,3,4,5……的顺序,这样一来,使得隔行显示就失效了,会出现两行或三行是同一种颜色的情况。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-3-28 20:59 , Processed in 0.120345 second(s), 38 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表