FastReport Studio报表文件隐式分发的研究与实现

2008-07-14 10:05刘耿龙
电脑知识与技术 2008年18期
关键词:报表

摘要:在C/S/D模式下,由客户端读取并显示在数据库中存储的FastReport Studio报表,实现报表文件的隐式分发,解决了在传统软件分发模式下更新报表文件时重复分发的问题。

关键词:软件分发;FastReport Studio;ADO;VB;报表

中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)18-2pppp-0c

Research and Implementation for Implicit Distribution of FastReport Studio Report File

LIU Geng-long

(Xuzhou College of Industrial Technology,JiangSu 221140,China)

Abstract:In the C/S/D mode, the client read and display FastReport Studio report which stored in the database,realize the implicit distribution of report file,resolved the question of redistribute the updated report file in traditional software distribution model.

Key words:Software distribution;FastReport Studio;ADO;VB;Report

1 引言

软件分发是软件交付的重要一步,开发者通过安装工具将软件运行所需的文件打包形成安装包,交付给最终用户使用。在C/S/D(客户端/服务器/数据库)模式下,在基于FastReport Studio(以下简称FRS)报表工具开发应用软件时,如采用传统的软件分发模式,当FRS报表文件更新时,必须重新打包进行分发。上述FRS报表文件的显式分发模式存在的缺点不言而喻,解决方法是:将FRS报表文件存储到数据库中,客户端通过FRS提供的程序接口读取并显示报表,从而实现FRS报表文件的隐式分发。

2 实现原理

FRS提供了LoadReportFromStream方法,允许开发工具 读取以Stream流(二进制数据流)存在的FRS报表,在此前提下,通过ADO对象将FRS报表文件存储到数据库中,即可实现FRS报表文件的在客户端的分发。如更新数据库中FRS报表Stream流,则实现了FRS报表在客户端的再次分发(图1)。

图1 原理图

3 实现过程

3.1 FRS报表设计

利用FRS外部报表设计器(FastReport Designer)生成报表文件demo.fr3。设计布局如图2所示:

图2 demo.fr3设计布局

3.2 数据库设计

在SQL Server中创建数据库datademo,创建一个登录帐号demouser,密码demouser,默认登录数据库为datademo,设置角色为db_owner。

在datademo中创建一个数据表tb_frs,表结构定义如表1所示,并输入测试数据(图3):

表1 tb_frs表结构定义

图3 tb_frs表中的数据

3.3 程序设计

3.3.1 FRS报表文件的数据库存储及更新

利用ADO 对象中的Stream对象以二进制模式读取FRS报表文件,通过更新记录集的方式将FRS报表文件以Stream流存储到数据库中,基于VB的核心代码如下:

'定义数据库对象变量

Dim objDBConnection As ADODB.Connection

Dim objDBRecordSet As ADODB.Recordset

Dim objDBStream As ADODB.Stream

'实例化数据库对象变量

Set objDBConnection = New ADODB.Connection

Set objDBRecordSet = New ADODB.Recordset

Set objDBStream = New ADODB.Stream

'打开数据库

objDBConnection.Open "Provider=SQLOleDB;Server=127.0.0.1;UID=demouser;PWD=demouser;DataBase=datademo"

'操作ADO Steam对象读取已保存的FRS报表文件

With objDBStream

.Type = adTypeBinary'指定数据操作类型为二进制

.Open'打开Steam对象

.LoadFromFile App.Path + "demo.fr3"'读取存放在程序路径下的demo.fr3报表文件

End With

'将ADO Steam对象中读取的FRS报表文件Stream流写入数据表

With objDBRecordSet

.Open "select frs_data from tb_frs where frs_id=1", objDBConnection, 1, 3'打开记录集

.Fields("frs_data") = objDBStream.Read'指定更新表字段

.Update'更新记录集

End With

'关闭数据库对象,释放内存

objDBRecordSet.Close

objDBStream.Close

objDBConnection.Close

Set objDBRecordSet = Nothing

Set objDBStream = Nothing

Set objDBConnection = Nothing

'完成提示

MsgBox "demo.fr3报表文件已经存储到数据库中。", vbInformation, "提示"

3.3.2 客户端读取并显示数据库中的FRS报表

客户端通过FRS的LoadReportFromStream方法读取数据库中的FRS报表Stream流,利用ShowReport方法显示报表(图4),基于VB的核心代码如下:

'定义FRS报表对象,用于读取和显示FRS报表

Dim objFRS As FastReport.TfrxReport

'实例化FRS报表对象

Set objFRS = New FastReport.TfrxReport

'打开指定id的FRS报表记录集,对应测试数据见图3

objDBRecordSet.Open "select frs_data from tb_frs where frs_id=1", objDBConnection, 1, 3

'用ADO Stream对象读取数据表中的FRS报表文件Stream流

With objDBStream

.Mode = adModeReadWrite'打开Stream对象读写模式

.Type = adTypeBinary'指定数据操作类型为二进制

.Open'打开Stream对象

.Write objDBRecordSet("frs_data")'将FRS报表Stream流写入到Stream对象中

End With

'用FRS对象的LoadReportFromStream方法读取ADO Stream对象的Stream流并显示报表,原FRS报表文件见图2

With objFRS

.LoadReportFromStream objDBStream'指定FRS以Stream流方法加载报表

.ShowReport'显示报表

End With

图4 客户端显示打印预览窗口

4 结束语

在软件分发中实现FRS报表文件的隐式分发,减少了应用程序中FRS报表的后期维护量,对初步接触FRS报表工具的开发者具有较高的参考价值,同时对开发者优化软件分发有一定的借鉴作用。

参考文献:

[1]如何使用ADO Stream对象访问和修改 SQL Server BLOB 数据[EB/OL].http://support.microsoft.com/kb/258038/zh-cn,2004-09-01.

[2]FastReport Studio - Programmer manual[EB/OL].http://fast-report.com/pbc_download/FastReport Studio Programmers Manual (EN).pdf,2006-09.

[3]莫卫东.Visual Basic 6.0高级编程技巧-ADO数据访问篇[M].西安:西安交通大学出版社,2000.

收稿日期:2008-04-12

作者简介:刘耿龙(1975-),男,江苏徐州人,工程师,研究方向:数据库系统及教育管理应用软件开发。

猜你喜欢
报表
LabWindows/CVI中Excel报表技术研究
从三大报表读懂养猪人的成绩单
月度报表
月度报表