序列化FastReport

东东最可爱

东东最可爱

2016-02-19 20:49

下面这个序列化FastReport教程由图老师小编精心推荐选出,过程简单易学超容易上手,喜欢就要赶紧get起来哦!

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

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

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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

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

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

  在服务器端

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

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

  procedure TfrReport.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 TfrReport.Create(nil) do
      begin
          try
              LoadPreparedReport('d:2.frp'); //也可以改成上面流的形式,用EMFPages
              ShowPreparedReport;
          finally
              Free;
          end;
      end; 
  

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

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

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

  LoadPreparedReport//从frp载入一个结果

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

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

  LoadFromFile//载入报表格式文件
  

展开更多 50%)
分享

猜你喜欢

序列化FastReport

编程语言 网络编程
序列化FastReport

J2SE中的序列化之接受默认序列化

编程语言 网络编程
J2SE中的序列化之接受默认序列化

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

深入理解Java对象的序列化与反序列化的应用

编程语言 网络编程
深入理解Java对象的序列化与反序列化的应用

DataRow的序列化问题

电脑网络
DataRow的序列化问题

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

谈谈J2SE中的序列化之接受默认序列化

编程语言 网络编程
谈谈J2SE中的序列化之接受默认序列化

PHP拥有序列化方法

Web开发
PHP拥有序列化方法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

巧用DW判断字符串中是否有换行

巧用DW判断字符串中是否有换行

怎样在程序中利用C++支持多国语言

怎样在程序中利用C++支持多国语言
下拉加载更多内容 ↓