基于VB-CrystalReport 的C/S报表架构讨论(附源…

2008-04-09 04:06:03来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

在这里我主要想和大家讨论一下Crystal Report的总体框架模式方面的问题,重点是如何使用VB有效的融合报表和数据,快速的进行报表开发工作。希望抛砖引玉,找到几种最好最快的开发模式。

本文暂不涉及技术细节,所以您可能觉得太过简单。但这样的问题的确是我们开发中的第一号大问题。在以后的讨论中,我们可以针对具体的问题讨论具体的技术细节。
我准备了一份源代码,已经发给了部分网友,但是没有做详细的测试。我准备在明后天做完测试,如果各位有需要的话,应该在星期一左右可以发给你们(唉,星期六星期天还要加班!)。
注意:有需要的朋友请跟帖说明,不要只给我发短消息。
缩写语说明
RPT Crystal Report Template File. 使用Crystal Report设计器生成的报表样式和模板文件,后缀名为RPT
RDC Crystal Report Designer Component. Crystal Report的对象模型,用于在VB中操作Crystal Report.
CRV Crystal Report Viewer. OCX 控件,用于在VB中提供报表预览界面。
CRC Crystal Report Control. OCX 控件,在Crystal Report 8.0以前用于在VB中提供报表预览界面,现已被CRV取代。
CDO Crystal Data Source Object. Crystal Report 提供的数据源对象,用于创建与数据库无关的动态数据源。

一,如何动态获取数据,生成报表?
报表的一个主要特征就是根据事先设计好的模板样式和运行时的动态数据生成一份可查看与打印的文档。
一般来说,VB的程序中整个报表流程中的主线,由它来对Crystal Report及其它工具发号施令,实现用户需求。
VB是通过RDC模型来操作CrystalReport的。通常有如下两种模式生成报表:
1,VB-RPT-DB
VB调用RPT文件,RPT文件查询数据库得到数据,生成报表。此方法的详细流程如下:
1)在Crystal Report 中设计好RPT文件,设计时可在CrystalReport中连接到数据库,得到查询数据,即时预览报表。
2) 在VB中,通过RDC模型打开RPT文件,并将运行时和数据库连接所需的信息,如数据库名,用户,密码等传给RPT文件,如果RPT文件中有参数,还要传入参数。
3)RPT文件连接到数据库,执行查询得到数据,生成报表。
4) 在VB中,通过CRV控件打开报表进行预览或通过RDC模型进行打印,导出等操作。

2,VB-DB-RPT
VB先查询数据库得到结果集,再打开RPT文件并传入结果集,生成报表。此方法详细流程如下:
1)在Crystal Report 中设计好RPT文件。由于此时结果集还未生成,只能使用TTX文件做为虚拟数据源,以便读取字段信息。所以在设计RPT文件之前,还要根据最终的结果集结构生成一个TTX文件。
2)在VB中,连接到数据库,执行查询,得到结果集。
3)在VB中,通过RDC模型打开RPT文件,传入结果集和参数,生成报表。
4)在VB中,通过CRV控件打开报表进行预览或通过RDC模型进行打印,导出等操作。

显然,VB-RPT-DB模式远优于VB-DB-RPT模式,这体现在如下几个方面:
1,设计时,VB-DB-RPT模式一般要求生成一个和最终结果集字段结构完全一致的TTX文件做为虚拟数据源,增大的开发和维护的工作量,而且还不能即时预览生成的报表。VB-RPT-DB模式则是直接和数据库相连,无需TTX文件,还能看到最终数据。
2,运行时,VB-DB-RPT模式在得到结果集后,需要在VB中建立相应的结果集对象,并将其传入RPT文件,与VB-RPT-DB模式相比多了一个很大的对象--结果集对象。
3,运行时,VB-DB-RPT模式的结果集从DB传到VB,再传到RPT, 而VB-RPT-DB模式的结果集直接从DB传到RPT,少了一次大的数据传递。
4, 开发时,VB-DB-RPT模式一般每加一个报表,就要加两段代码:查询结果集和生成报表。而VB-RPT-DB模式可以很方便的实现一个接口应对所有的报表,新加报表几乎无需增加VB代码。二者的代码量不可同日而语。

二、如何生成报表模板文件?
设计报表格式是所有报表工作的第一步。在CrystalReport中,有两个地方可以设计报表,Crystal Report集成设计器和内嵌在VB中的报表设计器。我个人觉得,内嵌报表设计器的做法弊远大于利,不推荐使用。


三,如何查询DB,得到运行时数据。
通过VB查询DB得到结果集的方式有很多种,大家都很熟悉。通过RPT查询DB的方式主要有:存储过程,视图,表, Crystal Query, 直接SQL查询。
其中最简单的莫过于直接连接到表,进行表查询。可是一般的报表都不会只涉及到一个表。在RPT文件中进行多表查询并设置查询条件的方法虽然简单,但是分散了整体的查询逻辑,而且操作烦琐,不是一个好办法。视图和存储过程是最好的选择,不过视图在性能上不及存储过程,所以我推荐使用存储过程。
存储过程和视图是放在数据库中的。如果不允许或不能在数据库中建立视图和存储过程等,还可以利用Crystal Report自已的SQL查询功能,将完整的SQL查询语句写在RPT文件中。
从Crystal Report自己的说明来看,Crystal Query文件就像是Crystal Report自己的存储过程。不过这个工具不包含在Crystal Report 9中。Crystal Report 官方网站提供了单独的免费下载。这个工具有两个限制:在Crystal Queryk中的每个字段,字段值长度不能超过20个字符, 总字段数据也不能超过20个。我是从Crystal Report的帮助文件中看到这些信息的。如是真的话,Crystal Query就没有什么竞争力了。Crystal Report 也支持在设计RPT文件时直接写SQL,还可以带参数。这是个不错的功能。不知道是不是也有上述两个限制。
  我没有仔细测试Crystal Report内嵌SQL查询的功能,在此不宜多加评论。但我强烈推荐使用数据库的存储过程和视图。它有效的分离的报表工作中的逻辑和设计工作,利于分工合作,也利于编护和升级。  
使用Oracle的存储过程有如下限制,SQL Server 类似。
> 要使用本地连接或ODBC连接到Oracle,不能使用OLE DB连接。建议使用本地连接。
> 存储过程必须放到一个包内。结果集游标必须在包头声明。
> 存储过程只能有输入参数。
> 存储过程只能返回一个结果集,以输入输出型(IN OUT)的游标参数形式返回。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:集成产品开发(IPD)初探

下一篇:RTLinuxPro处理器中断控制技术