序列化FastReport,重要提示少走弯路 good

原本在开发一个报表插件,因为需要远程传输,因此需要序列化报表,序列化FastReport有两种方式,

1.仅序列化数据,由客户端接受到数据,并呈现报表,这种方式需要在客户端存储报表格式文件xxx.Frf,

2.序列化FastReport的结果集(即,得到数据后可以存成的frp文件),这样frf文件不需要在客户端存在.我倾向于采用这种方式,毕竟客户端越轻越好.

简单打开一个表之后,将fr生成结果存成frp后,发现有64k大,这是不能忍受的,这还仅仅是2xx数据而已,不过这个问题解决也很简单,压缩之(只有4K),d7自带的就有一个压缩单元zLib,至于zlib的用法很简单,它提供Stream和string 的压缩方式.这里就不说了,既然这个问题解决了,就剩序列化的代码,

序列化的过程很简单,其实了解了fr的几个重要方法之后,就很简单了,得到的成果如下:

在服务器端

frxReport1.Dataset := FrDbDataset1; //设置frReport的Dataset属性
FrDbDataset1.DataSet := Adoquery1; //链接frDbDataset和Dataset实例
AdoQuery1.Open; //取得数据
frxReport1.LoadFromFile(‘d:\1.frf‘); //载入一个报表格式文件
frxReport1.PrepareReport; //执行报表,得到数据,并不显示
frxReport1.SavePreparedReport(‘d:\3.frp‘); //将报表的结果存成文件

//载入3.frp,就可以得到序列化的数据,但是这样要访问硬盘,不爽.看看SavePreparedReport的代码

procedure TfrxReport.SavePreparedReport(FName: String); 
var 
  Stream: TFileStream; 
begin 
  Stream := TFileStream.Create(FName, fmCreate); 
  EMFPages.SaveToStream(Stream); 
  Stream.Free; 
end;

既然这样,看看EMFPages是否是public的,看来是可以的,那么我们可以将最后改成

Stream := TMemoryStream.Create; 
    EMFPages.SaveToStream(Stream);
    result := Stream;

客户端

更简单,你不需要任何的数据集,甚至连frReport类的实例也可以动态生成,

with TfrxReport.Create(nil) do 
    begin 
        try 
            LoadPreparedReport(‘d:\2.frp‘); //也可以改成上面流的形式,用EMFPages
            ShowPreparedReport; 
        finally 
            Free; 
        end; 
    end; 

在这个问题的解决中,可以学到FastReport的几个主要方法

PrepareReport//使报表从数据集得到数据

ShowPreparedReport//显示已经得到数据的报表,注意和ShowReport的区别,其实ShowReport的实现看看就明白了)

LoadPreparedReport//从frp载入一个结果

SavePreparedReport//将结果存成一个文件  

LoadFromFile//载入报表格式文件

特别注意:从FastReport 3.2开始已经取消了SavePreparedReport和LoadPreparedReport的直接引用,需要用PreviewPages.SaveToFile和PreviewPages.LoadFromFile来替换

http://www.cnblogs.com/sonicit/archive/2008/04/20/1162939.html

时间: 2024-08-10 03:14:13

序列化FastReport,重要提示少走弯路 good的相关文章

提高单片机抗干扰:如何让你的设计少走弯路

搞过产品的朋友都有体会,一个设计看似简单,硬件设计和代码编写很快就搞定,但在调试过程中却或多或少的意外,这些都是抗干扰能力不够的体现. 下面讨论一下如何让你的设计避免走弯路: 抗干扰体现在2个方面,一是硬件设计上,二是软件编写上. 这里重点提醒:在MCU设计中主要抗干扰设计是在硬件上,软件为辅.因为MCU的计算能力有限,所以要在硬件上花大工夫. 看看干扰的途径: 1:干扰信号干扰MCU的主要路径是通过I/O口,一是影响了MCU的数据采集,二是影响内部其它寄存器. 解决方法:后面讨论. 2:电源干

少走弯路的10条忠告

如何在涉世之初少走弯路,有一个好的开端,开始一番成功的事业?以下是一些先行者积累的10条有益的涉世忠告.好好地遵循.把握这些忠告和建议吧,比起所学的课堂课程来,它毫不逊色! 1.1.买个闹钟,以便按时叫醒你 贪睡和不守时,都将成为你工作和事业上的绊脚石,任何时候都一样.不仅要学会准时,更要学会提前.就如你坐车去某地,沿途的风景很美,你忍不住下车看一看,后来虽然你还是赶到了某地,却不是准时到达.“闹钟”只是一种简单的标志和提示,真正灵活.实用的时间,掌握在每个人的心中. 1.2.如果你不喜欢现在的

virtual box下安装centos遇到的N个问题,纯新手为后来的更多纯新手发福利,少走弯路,少浪费时间!

一直在做前端,近来兴起研究虚拟机和centos,于是网上搜索下载了virtual box,安装很简单也很顺利,但是在装centos遇到问题,卡了我两个晚上,解决一个又来一个,郁闷的,现在罗列下,让新手们少走弯路,少浪费时间: 1. 找不到镜像 最低级的问题是未下载iso文件,以为在virtual box下选择了centos就可以顺利启动了...(汗,我自己就是这样,后来度娘发现N多跟我一样的) 解决办法: 1)  请到www.virtualbox.org/wiki/Downloads下载iso镜

少走弯路的十条忠告

少走弯路的十条忠告 如何在涉世之初少走弯路,有一个好的开端,开始一番成功的事业?以下是一些先行者积累的10条有益的涉世忠告.好好地遵循.把握这些忠告和建议吧,比起所学的课堂课程来,它毫不逊色!          1. 买个闹钟,以便按时叫醒你.贪睡和不守时,都将成为你工作和事业上的绊脚石,任何时候都一样.不仅要学会准时,更要学会提前.就如你坐车去某地,沿途的风景很美,你忍不住下车看一看,后来虽然你还是赶到了某地,却不是准时到达.“闹钟”只是一种简单的标志和提示,真正灵活.实用的时间,掌握在每个人

人生少走弯路的十条忠告

一.买个闹钟,以便按时叫醒你.贪睡和不守时,都将成为你工作和事业上的绊脚石,任何时候都一样.不仅要学会准时,更要学会提前.就如你坐车去某地,沿途的风景很美,你忍不住下车看一看,后来虽然你还是赶到了某地,却不是准时到达."闹钟"只是一种简单的标志和提示,真正灵活.实用的时间,掌握在每个人的心中. 二.如果你不喜欢现在的工作,要么辞职不干,要么就闭嘴不言.初出茅庐,往往眼高手低,心高气傲,大事做不了,小事不愿做.不要养成挑三拣四的习惯.不要雨天烦打伞,不带伞又怕淋雨,处处表现出不满的情绪.

手机酷派4G5316 5313s 黑砖 求转成功 9008端口 9006端口 少走弯路选对镜像

首先要有资料 里面有教程  http://pan.baidu.com/s/1bpjxP6n 1.用其他手机 or u 盘往sd卡放进“强制进入下载模式的文件” 2. 驱动 3.刷机工具 下载镜像       少走弯路选对镜像 ..................注意在下载镜像后放在sd卡得强制进入下载模式的文件   开机的时候要删除  或者  在开机状态 插入sd卡

让年轻程序员少走弯路的14个忠告

无论是谁,在刚进入某个领域之时,有再大的雄心壮志也敌不过眼前的迷茫:不知道应该怎么做,不知道应该做什么.下面是让年轻程序员少走弯路的14个忠告,希望能对大家有所帮助. 1.不要害怕在工作中学习. 只要有电脑,就可以通过电子阅读器阅读报纸和大多数书籍.如果你只是做好自己的本职工作以及分配的任务,那是学不到很多东西的.如果你盲目地要求更多的工作,也是不可能提升自己的.放慢脚步,先将一些基础的知识捡起来. 2.在事业上勇往直前,自己为自己负责. 大概只有十分之一的人才能得到导师的特殊照顾,如果你是十分

论“java程序员的进阶路途”如何做到少走弯路,多写正确有意义的代码。

首先说明一下我为什么会去思考这个问题.本人离开学校也有一段时间了,经过了几场面试几次临时抱佛脚还有遇到的种种问题之后,社会告诉了我,如何做到少走弯路?如何让自己在何时去写合适的代码.其实在我看来这是每一位程序员都会去思考的事情. one:"如何让自己少走弯路" 一个伟大的程序员或者架构师再或者一个cto,如果你想问他们怎样让自己快速的进步?他们如一的告诉你,"累代码":对,对,讲的对!一名合格的程序员就是从简单的代码积累进阶的. 可是如果一名程序员重复的代码永远就是

一个Android菜鸟“面霸”的面试经历,如何少走弯路多加薪!

作为程序员,尤其是菜鸟程序员,如何成为一个"面霸"征战沙场,少走弯路,升职加薪,当上CTO,迎娶白富美! 今天是我入职一个创业公司的第二天.由于公司今天才把自己用的电脑买回来,只好今天在做着每一个技术人员入职第一天常做的事:安装相关开发软件,配置开发环境. 在安装软件的过程中,由于下载最新版的android studio比较缓慢,只好在下载过程中随便翻翻.然后,看到一个开发群里,一位朋友还在聊面试的事,他在那里说,今天又没有面试通知.听了之后,感慨万千,这样的感受我也有过很多次. 至于