首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2013-01-07 
【水晶报表内功心法】--推拉之间本帖最后由 babyt 于 2009-06-22 19:59:25 编辑索引【水晶报表内功心法】--序

【水晶报表内功心法】--推拉之间
本帖最后由 babyt 于 2009-06-22 19:59:25 编辑 索引

【水晶报表内功心法】--序言 

============================================================

水晶报表程序控制上有两种模式,也就是传说中的PULL模式和PUSH模式。口语化点就是拉模式和推模式。
把这个放在最开始讲,是因为模式的选择,会影响到后续的开发。
特别是看到一些使用者,把两种模式的代码里捏在一个过程里,出了错误,都不知道怎么去调试。
本文将讲解两种模式的基本原理,区别,以及各自的优缺点,还有部分开发报表的基本原则。
同样,本文是没有代码的,代码将从下一篇文章开始。

1.1 拉(PULL)模式:
由水晶报表模板(引擎)直接连接数据库(源),从数据库(源)里拉取数据
就是我们在水晶报表里设置好数据库信息,以及相关的表。
当我们在程序中调用水晶报表引擎,挂载模板后,水晶报表引擎会根据模板里的数据库信息,及表信息主动连接数据库,
返回数据给报表模板,模板根据设计样式进行呈现。
基本流程如下图所示

[img=http://album.hi.csdn.net/app_uploads/babyt/20090622/125840676.p.png?d=20090622131107566][/img]
(图1-1-1)

1.2 推(PUSH)模式:
由应用程序从数据库(源)获取数据,然后把数据推送给水晶报表引擎。水晶报表本身不不跟数据库进行交互。
其基本流程图如下

[img=http://album.hi.csdn.net/app_uploads/babyt/20090622/125841582.p.png?d=20090622131107644][/img]

(图1-1-2)

对比两个图,黑色的箭头表示我们要自己进行编码,蓝色的箭头表示是水晶报表与数据源的自动交互过程,不需编码。
这样我们很容易看到,使用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模式的样板招式

其他:本帖不回复与本文内容无关的问题。
[解决办法]
感谢分享。

图看不到。
[解决办法]
学习,期待下一篇
[解决办法]
红色部分pull,push没区分,全成了pull了
[解决办法]
学习
[解决办法]
学习
[解决办法]
呵呵,感谢,好东西啊。
[解决办法]
ding
[解决办法]
好,学习了,.................
[解决办法]
刷了一上午没等到
,,

建议泰哥定时发,不要让大家一直等
如果有变动,发个帖子说明下。
[解决办法]
顶一下 
[解决办法]
用了那么久,一直用Push模式,主要是第一次接触时候就用的这一种模式,然后先入为主



之前也听说过,推模式和拉模式,
自己总搞不清楚,然后去网上看了些资料,似懂非懂,过了一段就忘了
这次听阿泰这么一讲
终于明白了,原来是根据和数据库打交道的方式不一样区分的,受教了


不错,顶阿泰
------------
期待后续>>
------------
[解决办法]


[解决办法]
水晶报表引擎和App能否跨网络部署?
[解决办法]
看来图中的水晶报引擎包括了展现引擎和数据获取引擎,并且可以分开部署,push模式只是不用数据获取引擎。
没用过水晶报表,不过各类报表之间原理应该类似吧。
[解决办法]
收藏!
[解决办法]
学习,期待下一篇
[解决办法]
汗~~ 已修正,非常感谢
[解决办法]
哇,真好看到这篇文章,我正有个非常急的报表问题呢。

我的报表数据源不是从数据库中得到的, 

而是从后台查出的一把DataTable,然后赋给rpt的。 

由于是这种情况,我居然不能通过设置数据源字段的格式,比如保留2个小数点。


而我跟rpt连接的数据字段,只是根据自己的返回的表结构,而对应的在数据库里面建了一个虚拟表

只是为了跟返回的Table有对应的字段。

http://topic.csdn.net/u/20090618/20/e90765a7-900b-4316-9e2f-260e854a0cb7.html

希望能够帮我啊。。
[解决办法]
学习学习
[解决办法]
trytry
[解决办法]
感谢
[解决办法]
不是灌水,弄点分下点东西
[解决办法]
学习
[解决办法]
引用:
哇,真好看到这篇文章,我正有个非常急的报表问题呢。 

我的报表数据源不是从数据库中得到的, 

而是从后台查出的一把DataTable,然后赋给rpt的。 

由于是这种情况,我居然不能通过设置数据源字段的格式,比如保留2个小数点。 


而我跟rpt连接的数据字段,只是根据自己的返回的表结构,而对应的在数据库里面建了一个虚拟表 

只是为了跟返回的Table有对应的字段。 

http://topic.csdn.net/u/20090618/20/e9076…


不能设置数据格式,可能数值类型,你把它定义为字符型了,这样无法设计数值型的预算,比如精度和求和等。
解决方案:
1.格式化字符,
2.数据类型更改为数字,右键格式化里面有设置
[解决办法]
高手啊...
[解决办法]
一直关注中。。。
[解决办法]
不错不错.......至少这种心法练着无需自宫..............顶顶........
[解决办法]
谢谢阿泰!有时间好好研究研究……呵呵
[解决办法]
xiexie  


[解决办法]
学习学习~~~~~~
[解决办法]
咳咳........我定力好,练啥都不需要自宫....
[解决办法]
不错,学习下
[解决办法]
學習!
[解决办法]


[解决办法]
图标区人气是不是太旺
这么好的文章,才这几个人顶

接着Up


看这里的回复
最后更新 六成以上是阿泰
其他的里面也有阿泰的回复


难道这里是阿泰的回帖专区?!
[解决办法]
顶!
[解决办法]
收藏了.
[解决办法]
引用:
引用:
图标区人气是不是太旺 
这么好的文章,才这几个人顶 

接着Up 


看这里的回复 
最后更新 六成以上是阿泰 
其他的里面也有阿泰的回复 


难道这里是阿泰的回帖专区?! 



呵呵,图表本来在开发中占用的比重不太高,所以问题也自然没那么多。 
比不上c#和asp.net这样的热火板块, 
不过既然有人问,就要有人去答,而不是去管问题多少,热闹与否。 

另外很高兴llsen也加入到这个行…



我来只是凑热闹的
好多问题都不懂
还得跟泰哥混。。
[解决办法]
写的不错啊  学习学习
[解决办法]
感谢分享 。
[解决办法]
引用:
引用:
图标区人气是不是太旺 
这么好的文章,才这几个人顶 

接着Up 


看这里的回复 
最后更新 六成以上是阿泰 
其他的里面也有阿泰的回复 


难道这里是阿泰的回帖专区?! 



呵呵,图表本来在开发中占用的比重不太高,所以问题也自然没那么多。 
比不上c#和asp.net这样的热火板块, 
不过既然有人问,就要有人去答,而不是去管问题多少,热闹与否。 

另外很高兴llsen也加入到这个行…

为孤单的阿泰同学顶顶......顺便T一脚....
[解决办法]
什么东东?
[解决办法]
up
[解决办法]
xiexie
[解决办法]
希望有新的文章的时候,可否把地址发给我以下,多谢前辈,我的电邮,wanzegui325@163.com
[解决办法]
顶!
[解决办法]
顶!
[解决办法]
好贴收着了
[解决办法]
不错不错 ,学习
[解决办法]
hao
------解决方案--------------------


请教阿泰一个问题,困扰我几天了,我的WEB 水晶报表打印 ,已经下载 PrintControl.cab,然后根据 MSDN的介绍配置 web.config

<sectionGroup name="businessObjects">
      <sectionGroup name="crystalReports">
        <section name="printControl" type="System.Configuration.NameValueSectionHandler, System, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" />
      </sectionGroup>
    </sectionGroup>
  </configSections>

  <businessObjects>
    <crystalReports>
      <printControl>
        <add key="url" value="http://www.yikang.com/PrintControl.cab" />
      </printControl>
    </crystalReports>
  </businessObjects>


运行后提示一下错误:

“/”应用程序中的服务器错误。
--------------------------------------------

配置错误 
说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。 

分析器错误消息: 创建 businessObjects/crystalReports/printControl 的配置节处理程序时出错: 未能加载文件或程序集“System, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。系统找不到指定的文件。

源错误: 


行 24:     <sectionGroup name="businessObjects">
行 25:       <sectionGroup name="crystalReports">
行 26:         <section name="printControl" type="System.Configuration.NameValueSectionHandler, System, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" />
行 27:       </sectionGroup>
行 28:     </sectionGroup>
 

源文件: d:\inetpub\wwwroot\web.config    行: 26 

程序集加载跟踪: 下列信息有助于确定程序集“System, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”无法加载的原因。


警告: 程序集绑定日志记录被关闭。
要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1。
注意: 会有一些与程序集绑定失败日志记录关联的性能损失。
要关闭此功能,请移除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。

 


--------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.3053; ASP.NET 版本:2.0.50727.3053 


说明:
PrintControl.cab 打开 其中PrintControl.inf 文件内容为:

[version]
    ; version signature (same for both NT and Win95) do not remove
    signature="$CHICAGO$"   
    AdvancedINF=2.0   

[Add.Code]
    PrintControl.dll=PrintControl.dll

[PrintControl.dll]
    file-win32-x86=thiscab   
    ; *** add your controls CLSID here ***
    CLSID={83A3D1E4-ADC6-434D-9B61-B8CBA6183441}
    ; Add your ocx's file version here.   
    FileVersion=10,5,1,2285
    RegisterServer=yes 

[Setup Hooks]
    hook1=hook1



[hook1]
    run=%EXTRACT_DIR%\DependencyInstaller.exe

; ====================== end of PrintControl.inf =====================

请阿泰看看是哪里的问题,应该怎么修改(是不是版本号有问题)



[解决办法]
【水晶表格内功心法】-推拉之间
【水晶表格内功心法】-推拉之间
[解决办法]
ding
[解决办法]
XUEXI
[解决办法]
好贴,顶起!
[解决办法]
学习水晶报表
[解决办法]
学习

热点排行