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

?

在VB中集成水晶報(bào)表的RDC方法

2016-05-30 15:02:34隗燕琳陳敬超陳進(jìn)明李貴乙張華峰
軟件工程 2016年3期
關(guān)鍵詞:數(shù)據(jù)源水晶報(bào)表

隗燕琳 陳敬超 陳進(jìn)明 李貴乙 張華峰

摘 要:根據(jù)Visual Basic便捷的界面開發(fā)能力及CrystalReport強(qiáng)大的數(shù)據(jù)庫(kù)報(bào)表設(shè)計(jì)能力,研究探討了兩者相結(jié)合的集成編程方法,并分析了各種集成方法中數(shù)據(jù)格式,數(shù)據(jù)交互機(jī)制及具體應(yīng)用實(shí)例。采用兩者混合編程對(duì)數(shù)據(jù)庫(kù)軟件的開發(fā),提高開發(fā)質(zhì)量和效率具有重要意義。

關(guān)鍵詞:混合編程;Visual Basic;CrystalReport;數(shù)據(jù)報(bào)表

中圖分類號(hào):TP312 文獻(xiàn)標(biāo)識(shí)碼:A

Abstract:In term of the respective advantages of Crystal Report and Visual Basic software,researches are done in this paper on programming with Crystal Report and Visual Basic software together.This paper shows different methods in programming with the two kinds of software and also gives simple illustrations about different methods.It has great importance to help programmers with high quality and efficiency.

Keywords:admixture programming;visual basic;crystal report;data report

1 引言(Introduction)

數(shù)據(jù)庫(kù)軟件的編寫,要求軟件開發(fā)者不僅具有較高的數(shù)據(jù)庫(kù)報(bào)表和查詢功能的設(shè)計(jì)能力,而且要具有較高的軟件操作界面的設(shè)計(jì)能力。使用任何流行的Windows開發(fā)工具開發(fā)自定義應(yīng)用程序時(shí),若用自己的方法通過逐條訪問數(shù)據(jù)庫(kù)記錄來開發(fā)報(bào)表功能,那些復(fù)雜的數(shù)據(jù)格式、字體管理、圖形顯示,以及其他和Windows相關(guān)的顯示問題將變得非常重要,這是一個(gè)編程挑戰(zhàn)。而報(bào)表開發(fā)軟件又不具有實(shí)用的界面開發(fā)功能。這就要求開發(fā)者需將各具特點(diǎn)的軟件集成,進(jìn)行混合編程,才能研發(fā)出靈活、高效、實(shí)用的數(shù)據(jù)庫(kù)軟件系統(tǒng)。

Visual Basic是一種功能強(qiáng)大的編程語(yǔ)言,Windows下的大多數(shù)應(yīng)用程序的開發(fā),它都可以勝任,而且Visual Basic具有易學(xué)易用,編程簡(jiǎn)單,程序集成化程度高及界面可視化能力強(qiáng)的特點(diǎn)[1]。但是,Visual Basic中Data Report Designer的報(bào)表設(shè)計(jì)功能十分不靈活,需要建立一個(gè)包含所需查詢數(shù)據(jù)的臨時(shí)數(shù)據(jù)表[2],這極大增加了程序開發(fā)的工作量及程序的執(zhí)行時(shí)間。此外選擇使用VB中綁定的Crystal Reports版本,在使用上會(huì)受到很多限制[3]。

Crystal Reports中的RDC提供了很好的功能以及簡(jiǎn)單的使用方法,使用其面向?qū)ο蟮慕涌?,可以輕松地完成許多復(fù)雜的報(bào)表定制工作,而不需要使用那些繁瑣的Windows API。RDC同時(shí)也提供了嵌入VB的報(bào)表設(shè)計(jì)功能。雖然在簡(jiǎn)單的應(yīng)用中,你會(huì)發(fā)現(xiàn)ActiveX控件是集成報(bào)表的好方法,但這種設(shè)計(jì)方法不利于功能的更新,因?yàn)楹芏喙δ茉贑rystal Reports 6.0以后就不更新了。

顯然,如果將Crystal Reports強(qiáng)大的報(bào)表設(shè)計(jì)功能和VB在界面設(shè)計(jì)方面的優(yōu)勢(shì)結(jié)合起來,采用程序集成的方式,將提高程序的設(shè)計(jì)效率,縮短設(shè)計(jì)周期。本文著重分析兩者集成開發(fā)數(shù)據(jù)庫(kù)軟件的方法。

2 RDC集成編程技術(shù)(RDC integrated programming technology)

Crystal Report的Report Designer Component(RDC)可以使報(bào)表設(shè)計(jì)和靈活的報(bào)表集成都在VB的集成開發(fā)環(huán)境中實(shí)現(xiàn)。

一般使用水晶報(bào)表進(jìn)行報(bào)表開發(fā)時(shí),都要先連接數(shù)據(jù)庫(kù)。下面以“僅字段定義”“ODBC(RDO)”“Access/Excel(DAO)”這三種常用數(shù)據(jù)源為例,闡述RDC集成編程技術(shù)。軟件集成環(huán)境為VB6.0、CrystalReport9。

2.1 采用“僅字段定義”作為數(shù)據(jù)來源編程

如果從事下層數(shù)據(jù)庫(kù)軟件開發(fā),一般是不允許水晶報(bào)表直接訪問數(shù)據(jù)庫(kù)的,而是通過開發(fā)的軟件返回?cái)?shù)據(jù)給水晶報(bào)表。此時(shí)可使用水晶報(bào)表中的“僅字段定義”作為數(shù)據(jù)來源,來徹底擺脫與數(shù)據(jù)庫(kù)的直接聯(lián)系,從而開發(fā)出便于發(fā)布、移植以及擺脫數(shù)據(jù)庫(kù)限制的報(bào)表系統(tǒng)[4]。

第一步:在CrystalReport9中建立報(bào)表模板

在CrystalReport9中新建一個(gè)報(bào)表(圖1),在“Crystal Reports庫(kù)”中根據(jù)需要選擇建文檔的方法。確定后點(diǎn)擊“數(shù)據(jù)庫(kù)專家”中“僅字段定義”左邊的加號(hào),創(chuàng)建字段定義文件(圖2)。

水晶報(bào)表中的字段定義功能是使用一個(gè)單獨(dú)的dll實(shí)現(xiàn)的,水晶報(bào)表默認(rèn)安裝時(shí)沒有這個(gè)組件,所以可能需要重新補(bǔ)充安裝一下,進(jìn)行定制安裝增加該功能組件。如果之前已經(jīng)創(chuàng)建過字段定義文件,可以瀏覽選取,否則就使用“創(chuàng)建文件”來創(chuàng)建新的字段文件。

添加字段時(shí),字段名不能使用漢字,否則制作報(bào)表時(shí)將出現(xiàn)亂碼(如圖4)。字段設(shè)置完畢,點(diǎn)擊右上角的叉,將這個(gè)文件保存,形成字段定義文件“DataFile.ttx”。

保存完畢后,在圖3窗體上點(diǎn)擊“完成”然后將做好的報(bào)表模板添加到右側(cè)“選定的表”中(圖5)。點(diǎn)擊“確定”后,就可以設(shè)計(jì)報(bào)表模板了。此時(shí)可根據(jù)需要將字段名修改成漢字,并可添加參數(shù)字段(圖6)。

保存后形成報(bào)表模板文件“DataFile.rpt”,該文件及字段定義文件“DataFile.ttx”文件將在VB程序中加載。

第二步:在VB中加入CrystalReport9的相關(guān)文件

在VB“工程”菜單中點(diǎn)擊“部件”,在“控件”選項(xiàng)頁(yè)中勾選“Crystal Report Viewer Control 9”,將“CRViewer9”報(bào)表預(yù)覽控件布置在窗體上。

在VB“工程”菜單中點(diǎn)擊“引用”,勾選“Microsoft ActionX Data Objects 2.5 Library”和“Crystal Reports 9 ActiveX Designer Run Time Library”兩項(xiàng)庫(kù)文件。

第三步:在VB中集成CrystalReport9

首先在窗體中添加如下代碼,以聲明水晶報(bào)表應(yīng)用程序Application對(duì)象及報(bào)表Report對(duì)象:

Private objCRAppAs New CRAXDRT.Application

Private objCRReportAs New CRAXDRT.Report

然后聲明記錄集變量及報(bào)表相關(guān)變量。

Dim rstAs New ADODB.Recordset

Dim props As CRAXDRT.ConnectionProperties'報(bào)表數(shù)據(jù)源參數(shù)集

Dim prop As CRAXDRT.ConnectionProperty'報(bào)表數(shù)據(jù)源參數(shù)

構(gòu)建一個(gè)數(shù)據(jù)集,定義其中的字段類型,然后添加數(shù)據(jù)信息,實(shí)例程序如下:

rst.CursorLocation=adUseClient

With rst.Fields

.Append "XingMing",adVarChar,20

.Append "ZhiWu",adVarChar,20

.Append "ZhiCheng",adVarChar,20

.Append "GongZi",adVarChar,20

End With

rst.Open

With rst

For i=0 To 4

.AddNew

.Fields(0)=”王”&i

.Fields(2)=”職務(wù)”&i

.Fields(0)=”職稱”&i

.Fields(0)=(1000*(5-i))

.Update

Next

End With

該操作可以替換成任意的過程,最終目的就是處理成一個(gè)記錄集,作為報(bào)表的數(shù)據(jù)來源。

現(xiàn)在添加報(bào)表模板,加載報(bào)表字段定義文件,并執(zhí)行Report對(duì)象的DiscardSavedData方法清除其保持的數(shù)據(jù),將屬性值變成設(shè)計(jì)時(shí)的值。

Set objCRReport=objCRApp.OpenReport(App.Path&"\DataFile.rpt",1)

Set props=objCRReport.Database.Tables(1).ConnectionProperties

For Each prop In props

If InStr(prop.Name,"Field Definition File")>0 Then

prop.Value=App.Path&"\DataFile.ttx"

Exit For

End If

Next

Set props=Nothing

objCRReport.DiscardSavedData

我們?cè)趫?bào)表模板“DataFile.rpt”中增加了兩個(gè)參數(shù),下面要對(duì)Report對(duì)象的參數(shù)進(jìn)行設(shè)置。為了讓程序運(yùn)行時(shí)不出現(xiàn)參數(shù)提示框,需添加代碼:

objCRReport.EnableParameterPrompting=False

然后清理參數(shù)可能存在的參數(shù)默認(rèn)值,再對(duì)參數(shù)進(jìn)行賦值,添加如下代碼:objCRReport.ParameterFields(1).ClearCurrentValueAndRange

objCRReport.ParameterFields(2).ClearCurrentValueAndRange

Call objCRReport.ParameterFields(1).AddCurrentValue

("報(bào)表測(cè)試")

Call objCRReport.ParameterFields(2).AddCurrentValue

("2014-12-10")

如果此處出現(xiàn)錯(cuò)誤提示,那么就要查看傳入的參數(shù)是否有值,參數(shù)的類型是否匹配,是否要進(jìn)行類型轉(zhuǎn)換后才能傳入,傳入?yún)?shù)的值的序號(hào)是否對(duì)應(yīng)。

最關(guān)鍵的一步是將新建的數(shù)據(jù)集rst賦值給報(bào)表的Repor對(duì)象。

objCRReport.Database.SetDataSourcerst

然后進(jìn)行報(bào)表顯示外觀設(shè)置。報(bào)表外觀相關(guān)屬性如下:

是否顯示右上角水晶報(bào)表的圖標(biāo):CRViewer1.EnableAnimationCtrl

是否顯示導(dǎo)出報(bào)表按鈕:CRViewer1.EnableExportButton

是否顯示關(guān)閉按鈕:CRViewer1.EnableCloseButton

是否顯示左側(cè)樹列表:CRViewer1.EnableGroupTree

是否顯示導(dǎo)航:CRViewer1.EnableNavigationControls

是否顯示彈出菜單:CRViewer1.EnablePopupMenu

是否顯示打印按鈕:CRViewer1.EnablePrintButton

是否顯示刷新按鈕:CRViewer1.EnableRefreshButton

是否顯示工具欄:CRViewer1.EnableToolbar

是否顯示比例調(diào)整窗口:CRViewer1.EnableZoomControl

報(bào)表顯示的樣式:CRViewer1.DisplayBackgroundEdge

報(bào)表控件是否有邊框:CRViewer1.DisplayBorder

是否顯示報(bào)表的選項(xiàng)卡:CRViewer1.DisplayTabs

最后指定報(bào)表來源,進(jìn)行報(bào)表顯示設(shè)置,并釋放數(shù)據(jù)集變量。

CRViewer91.ReportSource=objCRReport

CRViewer91.ViewReport

Set rst=Nothing

此外,還可使用“工程”菜單中的“添加CrystalReports9”選項(xiàng),這時(shí)會(huì)自動(dòng)添加一個(gè)包含“Crystal Report”查看器控件的窗體,并在窗體中自動(dòng)添加相關(guān)代碼。該方法的程序設(shè)計(jì)不需要使用報(bào)表數(shù)據(jù)源參數(shù),且不用添加報(bào)表模板文件,但需將上述程序中的CRAXDRT.Report類型變量用CrystalReport1類型變量替換即可。

2.2 采用“ODBC(RDO)”作為數(shù)據(jù)來源編程

ODBC(Open DataBase Connectivity)是微軟公司定制的標(biāo)準(zhǔn)編程接口,只要有相應(yīng)的ODBC驅(qū)動(dòng)程序,就可以通過ODBC連接操作各種不同的數(shù)據(jù)庫(kù)。通常通過控制面板的管理工具中的ODBC Data Source來配置ODBC的數(shù)據(jù)源。所謂ODBC數(shù)據(jù)源就是命名的一組信息,包括需要連接的數(shù)據(jù)庫(kù)所在位置(可以是磁盤目錄/文件,也可以是網(wǎng)絡(luò)服務(wù)器)、對(duì)應(yīng)的ODBC驅(qū)動(dòng)程序以及訪問數(shù)據(jù)庫(kù)所需要的其他相關(guān)信息,用戶可以通過數(shù)據(jù)源的名稱(DSNs,Data Source Names)來指定所需的ODBC連接。

設(shè)置好ODBC數(shù)據(jù)源后,在“數(shù)據(jù)庫(kù)專家”中點(diǎn)擊“創(chuàng)建新連接”中的“ODBC(RDO)”連接所設(shè)置的ODBC數(shù)據(jù)源,將所需數(shù)據(jù)表加入到“選定的表”中,然后在“數(shù)據(jù)庫(kù)字段”中選擇所需的字段,拖放到報(bào)表中設(shè)計(jì)所需的樣式。該過程可在CrystalReport9中建立報(bào)表模板形成外部的.rpt文件,或使用Project菜單中的Add CrystalReports 9選項(xiàng)這兩種RDC方式實(shí)現(xiàn)。需添加的程序代碼與2.1中相似,此時(shí)不需要建立臨時(shí)數(shù)據(jù)集,只需利用水晶報(bào)表的數(shù)據(jù)選擇語(yǔ)句選擇ODBC數(shù)據(jù)源中的數(shù)據(jù)進(jìn)行報(bào)表設(shè)計(jì)。

ODBC數(shù)據(jù)源可與其他用戶網(wǎng)絡(luò)共享,添加數(shù)據(jù)選擇代碼時(shí)不用打開數(shù)據(jù)集,只需選擇數(shù)據(jù)傳遞給報(bào)表即可。此外數(shù)據(jù)源的存放地址可以隨意更改,更改后要重新設(shè)置ODBC數(shù)據(jù)源。

2.3 采用“Access/Excel(DAO)”作為數(shù)據(jù)來源編程

將Access/Excel作為數(shù)據(jù)來源時(shí),同樣是在“數(shù)據(jù)庫(kù)專家”中點(diǎn)擊“創(chuàng)建新連接”,然后連接Access/Excel(DAO)數(shù)據(jù)源。設(shè)計(jì)報(bào)表的方式與2.2相同,均可在CrystalReport9中建立報(bào)表模板形成外部的.rpt文件,或使用Project菜單中的Add CrystalReports 9選項(xiàng)這兩種RDC方式實(shí)現(xiàn)。添加的程序代碼與2.2中相似。

Access/Excel數(shù)據(jù)源在連接時(shí)非常直接便捷,數(shù)據(jù)源存放地址可以更改,更改后要進(jìn)行數(shù)據(jù)源位置更新設(shè)置。

3 結(jié)論(Conclusion)

本文詳細(xì)介紹了VB6.0和CrystalReport9兩種語(yǔ)言的混合編程方法,以簡(jiǎn)單的應(yīng)用實(shí)例講解了三種常用數(shù)據(jù)源的RDC方法,并給出了程序源代碼?!皟H字段定義”的數(shù)據(jù)源類型能開發(fā)出便于發(fā)布、移植以及擺脫數(shù)據(jù)庫(kù)限制的報(bào)表系統(tǒng),ODBC數(shù)據(jù)源可與其他用戶網(wǎng)絡(luò)共享,而Access/Excel數(shù)據(jù)源在連接時(shí)非常直接便捷。CrystalReport和VB結(jié)合,可以充分利用CrystalReport強(qiáng)大的報(bào)表設(shè)計(jì)功能和VB在圖形化界面設(shè)計(jì)方面的優(yōu)勢(shì),大大提高程序的設(shè)計(jì)效率,縮短設(shè)計(jì)周期。

參考文獻(xiàn)(References)

[1] 金英姿,鄧少鹍.Visual Basic實(shí)用培訓(xùn)教程[M].北京:人民郵電出版社,2003.

[2] 劉玉山,劉寶山.VB數(shù)據(jù)庫(kù)項(xiàng)目設(shè)計(jì)模塊化教程[M].北京:機(jī)械工業(yè)出版社,2009.

[3] George Peck.水晶報(bào)表設(shè)計(jì)與開發(fā)大全Crystal Reports 9[M].北京:清華大學(xué)出版社,2004.

[4] 阿泰.創(chuàng)建不受數(shù)據(jù)庫(kù)限制的報(bào)表[DB].http://blog.csdn.net/babyt,2004/2015.

作者簡(jiǎn)介:

隗燕琳(1977-),女,博士,工程師.研究領(lǐng)域:電氣工程.

陳敬超(1979-),男,碩士,工程師.研究領(lǐng)域:電氣工程.

陳進(jìn)明(1965-),男,本科,高級(jí)工程師.研究領(lǐng)域:電氣工程.

李貴乙(1982-),男,本科,高級(jí)工程師.研究領(lǐng)域:電氣工程.

張華峰(1981-),男,本科,高級(jí)工程師.研究領(lǐng)域:儀器計(jì)量.

猜你喜歡
數(shù)據(jù)源水晶報(bào)表
一張水晶卡告訴你浪漫都在哪
金卡生活(2021年7期)2021-07-07 05:14:40
LabWindows/CVI中Excel報(bào)表技術(shù)研究
邁向UHD HDR的“水晶” 十萬元級(jí)別的SIM2 CRYSTAL4 UHD
藍(lán)水晶般的大眼睛
Web 大數(shù)據(jù)系統(tǒng)數(shù)據(jù)源選擇*
從三大報(bào)表讀懂養(yǎng)豬人的成績(jī)單
基于不同網(wǎng)絡(luò)數(shù)據(jù)源的期刊評(píng)價(jià)研究
尋找藍(lán)水晶
基于真值發(fā)現(xiàn)的沖突數(shù)據(jù)源質(zhì)量評(píng)價(jià)算法
分布式異構(gòu)數(shù)據(jù)源標(biāo)準(zhǔn)化查詢?cè)O(shè)計(jì)與實(shí)現(xiàn)
黄骅市| 大化| 南皮县| 深水埗区| 安图县| 仲巴县| 池州市| 花莲县| 庆元县| 鄢陵县| 平江县| 巫山县| 潼南县| 灵山县| 金乡县| 万年县| 怀集县| 平南县| 龙游县| 巢湖市| 正定县| 合山市| 盐城市| 兰坪| 雷州市| 石楼县| 濮阳县| 明星| 茂名市| 英吉沙县| 乐陵市| 皮山县| 军事| 武平县| 盐亭县| 庄浪县| 晋州市| 贵南县| 庆阳市| 镇平县| 白山市|