国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

FastReport Studio報(bào)表文件隱式分發(fā)的研究與實(shí)現(xiàn)

2008-07-14 10:05劉耿龍
電腦知識(shí)與技術(shù) 2008年18期
關(guān)鍵詞:報(bào)表

摘要:在C/S/D模式下,由客戶端讀取并顯示在數(shù)據(jù)庫中存儲(chǔ)的FastReport Studio報(bào)表,實(shí)現(xiàn)報(bào)表文件的隱式分發(fā),解決了在傳統(tǒng)軟件分發(fā)模式下更新報(bào)表文件時(shí)重復(fù)分發(fā)的問題。

關(guān)鍵詞:軟件分發(fā);FastReport Studio;ADO;VB;報(bào)表

中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):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 引言

軟件分發(fā)是軟件交付的重要一步,開發(fā)者通過安裝工具將軟件運(yùn)行所需的文件打包形成安裝包,交付給最終用戶使用。在C/S/D(客戶端/服務(wù)器/數(shù)據(jù)庫)模式下,在基于FastReport Studio(以下簡稱FRS)報(bào)表工具開發(fā)應(yīng)用軟件時(shí),如采用傳統(tǒng)的軟件分發(fā)模式,當(dāng)FRS報(bào)表文件更新時(shí),必須重新打包進(jìn)行分發(fā)。上述FRS報(bào)表文件的顯式分發(fā)模式存在的缺點(diǎn)不言而喻,解決方法是:將FRS報(bào)表文件存儲(chǔ)到數(shù)據(jù)庫中,客戶端通過FRS提供的程序接口讀取并顯示報(bào)表,從而實(shí)現(xiàn)FRS報(bào)表文件的隱式分發(fā)。

2 實(shí)現(xiàn)原理

FRS提供了LoadReportFromStream方法,允許開發(fā)工具 讀取以Stream流(二進(jìn)制數(shù)據(jù)流)存在的FRS報(bào)表,在此前提下,通過ADO對(duì)象將FRS報(bào)表文件存儲(chǔ)到數(shù)據(jù)庫中,即可實(shí)現(xiàn)FRS報(bào)表文件的在客戶端的分發(fā)。如更新數(shù)據(jù)庫中FRS報(bào)表Stream流,則實(shí)現(xiàn)了FRS報(bào)表在客戶端的再次分發(fā)(圖1)。

圖1 原理圖

3 實(shí)現(xiàn)過程

3.1 FRS報(bào)表設(shè)計(jì)

利用FRS外部報(bào)表設(shè)計(jì)器(FastReport Designer)生成報(bào)表文件demo.fr3。設(shè)計(jì)布局如圖2所示:

圖2 demo.fr3設(shè)計(jì)布局

3.2 數(shù)據(jù)庫設(shè)計(jì)

在SQL Server中創(chuàng)建數(shù)據(jù)庫datademo,創(chuàng)建一個(gè)登錄帳號(hào)demouser,密碼demouser,默認(rèn)登錄數(shù)據(jù)庫為datademo,設(shè)置角色為db_owner。

在datademo中創(chuàng)建一個(gè)數(shù)據(jù)表tb_frs,表結(jié)構(gòu)定義如表1所示,并輸入測試數(shù)據(jù)(圖3):

表1 tb_frs表結(jié)構(gòu)定義

圖3 tb_frs表中的數(shù)據(jù)

3.3 程序設(shè)計(jì)

3.3.1 FRS報(bào)表文件的數(shù)據(jù)庫存儲(chǔ)及更新

利用ADO 對(duì)象中的Stream對(duì)象以二進(jìn)制模式讀取FRS報(bào)表文件,通過更新記錄集的方式將FRS報(bào)表文件以Stream流存儲(chǔ)到數(shù)據(jù)庫中,基于VB的核心代碼如下:

'定義數(shù)據(jù)庫對(duì)象變量

Dim objDBConnection As ADODB.Connection

Dim objDBRecordSet As ADODB.Recordset

Dim objDBStream As ADODB.Stream

'實(shí)例化數(shù)據(jù)庫對(duì)象變量

Set objDBConnection = New ADODB.Connection

Set objDBRecordSet = New ADODB.Recordset

Set objDBStream = New ADODB.Stream

'打開數(shù)據(jù)庫

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

'操作ADO Steam對(duì)象讀取已保存的FRS報(bào)表文件

With objDBStream

.Type = adTypeBinary'指定數(shù)據(jù)操作類型為二進(jìn)制

.Open'打開Steam對(duì)象

.LoadFromFile App.Path + "demo.fr3"'讀取存放在程序路徑下的demo.fr3報(bào)表文件

End With

'將ADO Steam對(duì)象中讀取的FRS報(bào)表文件Stream流寫入數(shù)據(jù)表

With objDBRecordSet

.Open "select frs_data from tb_frs where frs_id=1", objDBConnection, 1, 3'打開記錄集

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

.Update'更新記錄集

End With

'關(guān)閉數(shù)據(jù)庫對(duì)象,釋放內(nèi)存

objDBRecordSet.Close

objDBStream.Close

objDBConnection.Close

Set objDBRecordSet = Nothing

Set objDBStream = Nothing

Set objDBConnection = Nothing

'完成提示

MsgBox "demo.fr3報(bào)表文件已經(jīng)存儲(chǔ)到數(shù)據(jù)庫中。", vbInformation, "提示"

3.3.2 客戶端讀取并顯示數(shù)據(jù)庫中的FRS報(bào)表

客戶端通過FRS的LoadReportFromStream方法讀取數(shù)據(jù)庫中的FRS報(bào)表Stream流,利用ShowReport方法顯示報(bào)表(圖4),基于VB的核心代碼如下:

'定義FRS報(bào)表對(duì)象,用于讀取和顯示FRS報(bào)表

Dim objFRS As FastReport.TfrxReport

'實(shí)例化FRS報(bào)表對(duì)象

Set objFRS = New FastReport.TfrxReport

'打開指定id的FRS報(bào)表記錄集,對(duì)應(yīng)測試數(shù)據(jù)見圖3

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

'用ADO Stream對(duì)象讀取數(shù)據(jù)表中的FRS報(bào)表文件Stream流

With objDBStream

.Mode = adModeReadWrite'打開Stream對(duì)象讀寫模式

.Type = adTypeBinary'指定數(shù)據(jù)操作類型為二進(jìn)制

.Open'打開Stream對(duì)象

.Write objDBRecordSet("frs_data")'將FRS報(bào)表Stream流寫入到Stream對(duì)象中

End With

'用FRS對(duì)象的LoadReportFromStream方法讀取ADO Stream對(duì)象的Stream流并顯示報(bào)表,原FRS報(bào)表文件見圖2

With objFRS

.LoadReportFromStream objDBStream'指定FRS以Stream流方法加載報(bào)表

.ShowReport'顯示報(bào)表

End With

圖4 客戶端顯示打印預(yù)覽窗口

4 結(jié)束語

在軟件分發(fā)中實(shí)現(xiàn)FRS報(bào)表文件的隱式分發(fā),減少了應(yīng)用程序中FRS報(bào)表的后期維護(hù)量,對(duì)初步接觸FRS報(bào)表工具的開發(fā)者具有較高的參考價(jià)值,同時(shí)對(duì)開發(fā)者優(yōu)化軟件分發(fā)有一定的借鑒作用。

參考文獻(xiàn):

[1]如何使用ADO Stream對(duì)象訪問和修改 SQL Server BLOB 數(shù)據(jù)[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]莫衛(wèi)東.Visual Basic 6.0高級(jí)編程技巧-ADO數(shù)據(jù)訪問篇[M].西安:西安交通大學(xué)出版社,2000.

收稿日期:2008-04-12

作者簡介:劉耿龍(1975-),男,江蘇徐州人,工程師,研究方向:數(shù)據(jù)庫系統(tǒng)及教育管理應(yīng)用軟件開發(fā)。

猜你喜歡
報(bào)表
LabWindows/CVI中Excel報(bào)表技術(shù)研究
從三大報(bào)表讀懂養(yǎng)豬人的成績單
月度報(bào)表
月度報(bào)表