【水晶报表内功心法】--推拉之间

简介: 转自博客: http://blog.csdn.net/babyt/article/details/4610059 感谢博主阿泰的奉献!!致敬!!   水晶报表程序控制上有两种模式,也就是传说中的PULL模式和PUSH模式。

转自博客:

http://blog.csdn.net/babyt/article/details/4610059

感谢博主阿泰的奉献!!致敬!!

 

水晶报表程序控制上有两种模式,也就是传说中的PULL模式和PUSH模式。口语化点就是拉模式和推模式。
把这个放在最开始讲,是因为模式的选择,会影响到后续的开发。
特别是看到一些使用者,把两种模式的代码里捏在一个过程里,出了错误,都不知道怎么去调试。
本文将讲解两种模式的基本原理,区别,以及各自的优缺点,还有部分开发报表的基本原则。
同样,本文是没有代码的,代码将从下一篇文章开始。
1.1 拉(PULL)模式:
由水晶报表模板(引擎)直接连接数据库(源),从数据库(源)里拉取数据
就是我们在水晶报表里设置好数据库信息,以及相关的表。
当我们在程序中调用水晶报表引擎,挂载模板后,水晶报表引擎会根据模板里的数据库信息,及表信息主动连接数据库,
返回数据给报表模板,模板根据设计样式进行呈现。
基本流程如下图所示
image 
1.2 推(PUSH)模式:
由应用程序从数据库(源)获取数据,然后把数据推送给水晶报表引擎。水晶报表本身不不跟数据库进行交互。
其基本流程图如下
image 
对比两个图,黑色的箭头表示我们要自己进行编码,蓝色的箭头表示是水晶报表与数据源的自动交互过程,不需编码。

 

下面是本座的案例测试补充:

image

图 1-1-3

    上图为典型的PUSH推模式:先在Dataset中建立相应的表(表的字段要与数据库中相应表中的字段一致),在RPT文件中将Dataset中表字段与RPT相关联。

再在crystalReportViewer所有在窗体对,读取数据库给Dataset中相应的表赋值。这样,程序运行过程中,Crystal Reports引擎PUSH一下,就可以将数据PUSH到RPT界面了


这样我们很容易看到,使用PUSH模式将会比PULL模式多了不少代码。
而且因为PULL模式是直连数据库,比PUSH模式的先获取数据结果,然后推送给水晶报表少了一个过程。而中间结果集本身就占用系统资源。
所以PULL模式比PUSH执行效率高。
那么两者的差异就出来了
1:PULL模式代码量少
2:PULL模式执行效率高
3:实际开发过的朋友也有体会,使用PULL模式,模板开发的速度也比PUSH模式模板简单一些
这几点上,似乎PULL模式已经完全把PUSH模式打败了,呵呵。
那么为什么 PUSH模式还存在,且被大量使用呢?
我们再返回去看上面两个示意图,
大家注意到图1-1-1中,是由水晶报表连接的数据库,也就是说,水晶报表引擎单独占用了一个数据库连接。
而只有在水晶报表对象释放后,数据库连接才会释放(这个时段对系统时间来说,是比较长的,特别是如果要翻页等需要长时间连接数据库的情况)。
而在图1-1-2中,数据库是由应用程序去连接的,水晶报表本身不连接数据库。这样,系统就能使用公用的数据库连接。
这样一来,就节约了数据库的连接消耗。
这一点,在多用户的系统环境内,少一次数据库连接对系统性能的影响对系统的影响是比较关键的。
当然,我们也应该注意到,PUSH因为存在一个Dataset,所以会占用系统资源。
这两个方面大家需要综合考量。
这是个基本的,下面我在列一下PUSH的优势。
1:可以公用系统数据库连接,减少数据库连接损耗
2:可自由组合多数据源(如多数据库等),这一点PULL模式也可以实现,但是不如这个方便
3: 灵活多变
灵活多变的说法,是因为由于我们是把数据获取后,再PUSH给水晶报表的,那么在这个中间,就有很多数据再加工的可能性。
大家可以看一下我之前写的
动态(万能)水晶报表:任意表,任意列,动态格线调整
水晶报表动态表扩展  之  任意无关联表,任意列,任意数据源
水晶报表动态表扩展  之  任意SQL及任意有关联表,任意列  及其他

好了,总结一下:
1:CS模式或小型系统,建议用PULL模式,大型BS系统,建议用PUSH模式
但这不是绝对的,可以根据实际情况混用。如果是大数据量的清单类的报表,建议用PULL。
2:无论什么模式,返回尽可能少的数据给报表。
3:通常情况下,无论是PULL还是PUSH模式,数据源处理部分只负责把数据传给报表,至于怎么呈现是报表里去做的
有的人问到:做交叉表怎么传数据,做图表怎么传数据,做列表怎么传数据,实质上,做法都是一样的。
当然,特殊情况除外。如:SQL交叉表,自定义图表等等。
预告:PULL和PUSH模式的样板招式
【请尊重本人之劳动,转载请注明出处。讨论请至置顶的讨论帖,谢谢】

相关文章
|
存储 前端开发 JavaScript
潮玩宇宙大逃杀无聊猿卷轴模式系统开发详细规则丨步骤需求丨方案项目丨技术架构丨源码功能
确定游戏类型和规则:明确无聊猿卷轴模式游戏类型和游戏规则,包括敌人类型、地图设计、任务类型、战斗机制等。
|
7月前
|
存储 Web App开发 运维
发布、部署,傻傻分不清楚?从概念到实际场景,再到工具应用,一篇文章让你彻底搞清楚
部署和发布是软件工程中经常互换使用的两个术语,甚至感觉是等价的。然而,它们是不同的! • 部署是将软件从一个受控环境转移到另一个受控环境,它的目的是将软件从开发状态转化为生产状态,使得软件可以为用户提供服务。 • 发布是将软件推向用户的过程,应用程序需要多次更新、安全补丁和代码更改,跨平台和环境部署需要对版本进行适当的管理,有一定的计划性和管控因素。
1601 1
|
存储 区块链
无聊猿大逃杀游戏卷轴模式系统开发逻辑步骤
区块链的去中心化,数据的防篡改,决定了智能合约更加适合于在区块链上来实现
|
存储 Python
热饭的测开成果盘点第二十二期:wqrfnium自动维护库
本期介绍的是一个组件,身为python的第三方库,已经被pypi收录,且国内镜像源也早已复制。也就是说可以通过pip install 来下载。这个组件包括:wqrfnium 和 wqrfnium_app 。他们都是基于python/selenium/appium的一个可以自动维护ui元素,抵抗ui元素定位变化的组件。
热饭的测开成果盘点第二十二期:wqrfnium自动维护库
|
存储 运维 Kubernetes
独家交付秘籍之招式拆解(第一回)
上一回说到经历种种交付难题的王小锤一行人,意外发现一本交付秘籍,打开了新世界。本次他们带着具体交付场景来到阿里云,与交付宗师阿莫探讨秘籍中的招式以及招式背后的秘密。
独家交付秘籍之招式拆解(第一回)
带你读《流动的色彩—— 一本探索自由水彩世界的技法书》之三:猫
水彩画清新透明的质感、水色交融的画面,如同抒情诗或轻音乐般柔美。本书是一本从入门到精通式的水彩画技法教程,内容全面实用,讲解浅显易懂,编排清晰直观,既适合初学者,也适合有一定基础的绘画爱好者。希望本书能让读者在学习的过程中感受用画笔记录身边美好事物的乐趣。
带你读《流动的色彩—— 一本探索自由水彩世界的技法书》之二:绘画技法
水彩画清新透明的质感、水色交融的画面,如同抒情诗或轻音乐般柔美。本书是一本从入门到精通式的水彩画技法教程,内容全面实用,讲解浅显易懂,编排清晰直观,既适合初学者,也适合有一定基础的绘画爱好者。希望本书能让读者在学习的过程中感受用画笔记录身边美好事物的乐趣。
带你读《流动的色彩—— 一本探索自由水彩世界的技法书》之一:画材和画具
水彩画清新透明的质感、水色交融的画面,如同抒情诗或轻音乐般柔美。本书是一本从入门到精通式的水彩画技法教程,内容全面实用,讲解浅显易懂,编排清晰直观,既适合初学者,也适合有一定基础的绘画爱好者。希望本书能让读者在学习的过程中感受用画笔记录身边美好事物的乐趣。