[摘 要] 本文介紹在VB編程平臺(tái)上實(shí)現(xiàn)一種財(cái)務(wù)報(bào)表所見即所得打印技術(shù)及實(shí)現(xiàn)該技術(shù)的兩種編程方法,研究了兩種編程方法的特點(diǎn)及其適應(yīng)性。
[關(guān)鍵詞] VB ;報(bào)表程序;ActiveReports
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2010 . 14 . 004
[中圖分類號(hào)]F270.7;TP311.1 [文獻(xiàn)標(biāo)識(shí)碼]A [文章編號(hào)]1673 - 0194(2010)14- 0011- 02
所見即所得報(bào)表打印技術(shù),是財(cái)務(wù)管理軟件的必備功能,也是管理軟件開發(fā)技術(shù)追求的一種風(fēng)格。如微軟公司的辦公軟件Microsoft Excel的打印工具,就是大家所熟悉的。但把Microsoft Excel的打印工具移植到其他管理軟件上的技術(shù)復(fù)雜,不容易實(shí)現(xiàn)。本文提出以VB為編程平臺(tái),以Microsoft Office Web Components組件為管理軟件前臺(tái)界面,以第三方控件ActiveReports為打印工具,實(shí)現(xiàn)一種類似Microsoft Excel的打印工具風(fēng)格的財(cái)務(wù)報(bào)表打印技術(shù),并分析實(shí)現(xiàn)該技術(shù)的兩種編程方法的特點(diǎn),并對(duì)其進(jìn)行比較。
1 技術(shù)平臺(tái)
該所見即所得報(bào)表打印技術(shù)的開發(fā)環(huán)境是VB 6.0,前臺(tái)控件是Spreadsheet電子表格,后臺(tái)打印控件是ActiveReports,底層數(shù)據(jù)庫采用Microsoft Access,以ADO為數(shù)據(jù)庫接口技術(shù)。
1.1技術(shù)界面
該所見即所得報(bào)表打印技術(shù)的前臺(tái)界面如圖1所示。
該界面外觀可調(diào),表格的列寬、行高可任意調(diào)整,并能對(duì)任一列數(shù)據(jù)進(jìn)行排序、篩選。
該所見即所得報(bào)表打印技術(shù)的后臺(tái)打印工具界面如圖2所示。
該打印工具的打印參數(shù)可調(diào),如打印份數(shù)、頁面大小、橫打或豎打等可自行設(shè)置,顯示界面可放大縮小,一鍵式打印操作。
1.2兩種方法
實(shí)現(xiàn)該技術(shù)的關(guān)鍵是,怎樣把前臺(tái)界面的數(shù)據(jù)及其關(guān)系傳遞到打印工具界面。根據(jù)前臺(tái)界面數(shù)據(jù)及其關(guān)系的來源不同,本例采用兩種方法把前臺(tái)界面的數(shù)據(jù)及其關(guān)系傳遞到后臺(tái)打印工具界面。
第一種方法:前臺(tái)界面的數(shù)據(jù)及其關(guān)系來自底層數(shù)據(jù)庫MicrosoftAccess的,通過ADO從數(shù)據(jù)庫取出數(shù)據(jù)后,同時(shí)往前臺(tái)界面和打印工具界面輸送。這種方法可靠性高,前臺(tái)界面和打印工具界面都是重現(xiàn)數(shù)據(jù)庫的數(shù)據(jù)及其關(guān)系,數(shù)據(jù)及其關(guān)系不容易出錯(cuò),技術(shù)成熟。
第二種方法:前臺(tái)界面的數(shù)據(jù)來自人機(jī)接口(通常是手工輸入),則需要把前臺(tái)界面的數(shù)據(jù)及其關(guān)系往打印工具界面輸送,這種方法不如第一種方法的可靠性高。需要將數(shù)據(jù)與數(shù)據(jù)關(guān)系同時(shí)往打印工具輸送,并且要一一對(duì)應(yīng),缺一不可,數(shù)據(jù)或數(shù)據(jù)關(guān)系其中之一發(fā)生錯(cuò)誤,都會(huì)導(dǎo)致失敗,因此這種方法比較煩瑣 。
2 相關(guān)代碼
2.1底層數(shù)據(jù)庫與前臺(tái)表格連接代碼
Dim Con As ADODB.Connection
Dim Rs As ADODB.Recordset
Set Con = New ADODB.Connection
Con.ConnectionString = _
\"Provider=Microsoft.Jet.OLEDB.4.0 ;\" _
\"data source = \" App.Path \"\\db1.mdb\"
Con.Open
Set Rs = Con.Execute(\"select zhaiyao,shuliang,jine,zengjian from \" TableName \" Where\" FieldName \" = '\" FieldVaLue \"'\")
Dim i As Integer
Dim h As Integer
h = 1
Do
For i = 0 To Rs.Fields.Count - 1
Spreadsheet1.Cells(h,1).Offset(1,i).Value=Rs.Fields(i).Value
Next i
Rs.MoveNext
If Rs.EOF = True Then
Exit Do
End If
h = h + 1
Loop
2.2底層數(shù)據(jù)庫與后臺(tái)打印工具數(shù)據(jù)連接代碼
Dim Con As ADODB.Connection
Dim Rs As ADODB.Recordset
Set Con = New ADODB.Connection
Con.ConnectionString = _
\"Provider=Microsoft.Jet.OLEDB.4.0 ;\" _
\"data source = \" App.Path \"\\db1.mdb\"
Con.Open
Set Rs = Con.Execute(\"select zhaiyao,shuliang,jine,zengjian from \" TableName \"\")
rptZH.DataControl1.Recordset = Rs
2.3 前臺(tái)表格與后臺(tái)打印工具數(shù)據(jù)連接代碼
rptSheBeiQingChe.Field2.DataValue= Spreadsheet1.
Range(\"B2\").Text
3 結(jié)束語
本文介紹并實(shí)現(xiàn)的所見即所得財(cái)務(wù)報(bào)表打印技術(shù),所有編程元素均取自微軟公司對(duì)市場(chǎng)公開的技術(shù),代碼簡(jiǎn)單,界面簡(jiǎn)潔,功能全面,適應(yīng)性強(qiáng),而且可以根據(jù)需求靈活調(diào)整,充分滿足不同財(cái)務(wù)報(bào)表打印要求。在筆者開發(fā)的若干財(cái)務(wù)軟件中使用,是成功的。
主要參考文獻(xiàn)
[1][美]Henry E Korth,S Sudarshan.數(shù)據(jù)庫系統(tǒng)概念[M].原書第4版.楊冬青,譯.北京:機(jī)械工業(yè)出版社,2003.
[2][美]David M Kroenke.數(shù)據(jù)庫處理——基礎(chǔ)、設(shè)計(jì)與實(shí)現(xiàn)[M].第7版. 施伯樂,譯.北京:電子工業(yè)出版社,2003.
[3][美]Wayne Freeze.Visual Basic數(shù)據(jù)庫編程寶典[M] .尹喆,譯.北京:電子工業(yè)出版社,2001.