?

FastReport?。樱簦酰洌椋飯蟊砦募[式分發的研究與實現

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報表技術研究
從三大報表讀懂養豬人的成績單
月度報表
月度報表
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合