久久久久久久麻豆,中日韩av在线,麻豆av在线免费,中文字幕二区三区,欧美日韩视频一区二区,亚洲欧美日韩在线一区,国产无毒不卡

基于ActiveX技術(shù)的組態(tài)軟件通用報(bào)表控件的實(shí)現(xiàn)


1 引 言
通用組態(tài)軟件有著強(qiáng)大的功能,具有易用性,可以大大縮短用戶的開發(fā)時(shí)間,所以目前組態(tài)軟件在工業(yè)控制領(lǐng)域應(yīng)用的非常廣泛。作為通用得組態(tài)軟件,在某些方面可能不滿足我們的需求,這就要求我們通過其他工具進(jìn)行功能模塊開發(fā),集成到通用組態(tài)軟件中。
報(bào)表作為一種信息組織和分析的有力手段,是信息系統(tǒng)的重要組成部分。但很多組態(tài)軟件本身不具備報(bào)表功能,我們有必要開發(fā)通用報(bào)表控件,彌補(bǔ)組態(tài)軟件的不足,以滿足工程的需求。
要實(shí)現(xiàn)報(bào)表控件的通用性,最根本的技術(shù)措施是用對象、組件技術(shù)去開發(fā),利用對象的機(jī)理去組織報(bào)表,提高報(bào)表模塊的通用性和重用性,基于COM組件的ActiveX 技術(shù)能夠滿足該需求。
2 ActiveX技術(shù)
ActiveX是Microsoft 提出的功能強(qiáng)大的程序設(shè)計(jì)和開發(fā)技術(shù),基于Component Object Model (COM)的可視化控件結(jié)構(gòu)的一種封裝技術(shù)。ActiveX控件是以二進(jìn)制代碼形式發(fā)布,具有與語言無關(guān)的特點(diǎn),可以為任何支持COM 的高級語言及軟件所調(diào)用,有著較好的電腦移植性。利用組件技術(shù),可以實(shí)現(xiàn)一次編寫,多處使用,而不需要重新編譯鏈接,極大地推動了軟件的集成化[1] [2]。
可以用多種語言在WIN32環(huán)境下開發(fā)ActiveX組件,如MFC,ATL,VB,DELPHI等。在本文中,用VB對其進(jìn)行開發(fā)為例。VB提供了ActiveX控件界面向?qū)?,可以方便我們定義控件的屬性、方法和事件。
3 水晶報(bào)表控件
水晶報(bào)表(Crystal Reports)是一種報(bào)表系統(tǒng)常用的解決方案,能方便的與多種數(shù)據(jù)源建立連接,有著豐富的實(shí)現(xiàn)復(fù)雜報(bào)表格式和結(jié)構(gòu)、網(wǎng)絡(luò)輸出和打印輸出等功能。水晶報(bào)表主要有以下幾個(gè)重要組成部分組成: 報(bào)表引擎、報(bào)表設(shè)計(jì)器、報(bào)表查看控件、. rpt報(bào)表文件和數(shù)據(jù)源。
我們通過報(bào)表設(shè)計(jì)器來設(shè)計(jì)報(bào)表模板,如設(shè)計(jì)標(biāo)題,插入數(shù)據(jù)、公式、圖表、子報(bào)表等,并設(shè)置數(shù)據(jù)源,從而生成.rpt報(bào)表文件,在其他編程語言如VB中,可以通過報(bào)表引擎對報(bào)表數(shù)據(jù)進(jìn)行操作,通過報(bào)表查看控件預(yù)覽報(bào)表。
數(shù)據(jù)源作為報(bào)表非常重要的一個(gè)組成部分 。在拉模型中,驅(qū)動程序連接到數(shù)據(jù)庫并根據(jù)需要將數(shù)據(jù)“拉”進(jìn)來。使用這種模型,與數(shù)據(jù)庫的連接和為了獲取數(shù)據(jù)而執(zhí)行的SQL 命令都同時(shí)由Crystal 報(bào)表本身處理,不需要開發(fā)人員編寫代碼。與拉模型相反,推模型需要開發(fā)人員編寫代碼以連接到數(shù)據(jù)庫,執(zhí)行SQL 命令以創(chuàng)建與報(bào)表中的字段匹配的記錄集或數(shù)據(jù)集,并且將該對象傳遞給報(bào)表文件。該方法使您可以將連接共享置入應(yīng)用程序中,并在Crystal 報(bào)表收到數(shù)據(jù)之前先將數(shù)據(jù)篩選出來。


在組態(tài)軟件中直接引用水晶報(bào)表控件,存在著一些不足:報(bào)表是在數(shù)據(jù)庫的基礎(chǔ)上生成得,所以肯定有生成報(bào)表所要顯示得數(shù)據(jù)集,或者把報(bào)表要顯示的數(shù)據(jù)存儲到一個(gè)報(bào)表引用的臨時(shí)表。這個(gè)功能是需要和用戶進(jìn)行交互的,要通過寫代碼來實(shí)現(xiàn),而組態(tài)軟件的編程功能是相當(dāng)薄弱的,所以我們采取基于水晶報(bào)表來制作通用報(bào)表控件。
4 VB開發(fā)通用報(bào)表控件
4.1 報(bào)表控件設(shè)計(jì)的基本思路
作為優(yōu)秀的報(bào)表模塊,應(yīng)具備良好的用戶交互性,有著年月日報(bào)表、班報(bào)表、故障報(bào)表等供用戶選擇,并提供了打印、導(dǎo)出等功能。

 

為了方便滿足用戶的交互性,使用水晶報(bào)表的“拉模型”,當(dāng)用戶點(diǎn)擊顯示報(bào)表按鈕時(shí),根據(jù)用戶的選擇,報(bào)表控件自動生成SQL語句,利用ADO技術(shù),從SQL server數(shù)據(jù)庫中提取出報(bào)表數(shù)據(jù),存儲到一個(gè)臨時(shí)數(shù)據(jù)庫表中,而此臨時(shí)表是預(yù)先設(shè)計(jì)好的水晶報(bào)表模板的數(shù)據(jù)存儲表,所以顯示報(bào)表時(shí),驅(qū)動程序連接到數(shù)據(jù)庫的該臨時(shí)表并將數(shù)據(jù)“拉”進(jìn)來,生成報(bào)表。

 

4.2 報(bào)表控件屬性和方法
為了實(shí)現(xiàn)報(bào)表控件的通用性,該控件應(yīng)該具備完整的接口。

 

4.3 將此報(bào)表控件嵌入到組態(tài)軟件
在支持ActiveX控件的組態(tài)軟件或者其他軟件,如IE,WORD等,均可引用此報(bào)表控件,下面以INTOUCH9.5為例。
在INTOUCH中引AcitveX控件的主要步驟:WindowMaker---特別---配置---向?qū)?ActiveX安裝,在可用的AcitveX控件中,選擇我們做的通用報(bào)表控件-ReportCommon 1.0
INTOUCH使用此ActiveX控件范例如下:
#ReportCommon.Db_server="dataserver";
#ReportCommon.Initial_cata="intouch";
#ReportCommon.UserId="sa";
#ReportCommon.PassWord="intouch";以上為設(shè)置數(shù)據(jù)庫
#ReportCommon.RptSource="C:\RptSource\month.rpt";設(shè)置報(bào)表模板位置
#Report_common.RptPrinterName="printer1";選擇打印機(jī)
#Report_common.Autoprint_en=1;允許自動打印
#Report_common.Ymd_option=1;
#Report_common.Month_check=1;選擇月報(bào)表
#Report_common.ReportView();顯示報(bào)表
#Report_common. QuickPrint();打印報(bào)表
4.4 制作通用報(bào)表控件應(yīng)注意的問題
基于水晶報(bào)表做通用報(bào)表控件,可以大大簡化底層報(bào)表的具體設(shè)計(jì)工作,提高效率。在基于水晶報(bào)表設(shè)計(jì)通用報(bào)表控件時(shí)應(yīng)該注意以下事項(xiàng):
①為了實(shí)現(xiàn)報(bào)表控件的通用性,要考慮周全控件的屬性和方法,這樣才能成為真正意義上的“通用報(bào)表控件”。
②為了方便編程,我們使用水晶報(bào)表的“拉”模型,所以只需在數(shù)據(jù)庫中針對每個(gè)報(bào)表模板定義一個(gè)表,只是在生成報(bào)表時(shí)使用此表。當(dāng)用戶要求生成報(bào)表時(shí),首先清空此表,通過SQL語句按照用戶的選擇從歷史數(shù)據(jù)庫中提取數(shù)據(jù),寫入該表,然后再顯示報(bào)表。
③在使用分布式數(shù)據(jù)庫服務(wù)器,應(yīng)該注意在把數(shù)據(jù)寫入臨時(shí)表后,暫停一定時(shí)間,再顯示報(bào)表,因?yàn)镾QL語句的查詢、寫入和計(jì)算機(jī)之間的數(shù)據(jù)傳送需要一定時(shí)間,所以在設(shè)計(jì)時(shí),寫入臨時(shí)表數(shù)據(jù)后,暫停幾毫秒,再顯示報(bào)表,代碼如下:
''暫停0.05秒
Dim PauseTime, Start
PauseTime = 0.05 '' 設(shè)置暫停時(shí)間。
Start = Timer '' 設(shè)置開始暫停的時(shí)刻。
Do While Timer < Start + PauseTime
DoEvents '' 將控制讓給其他程序。
Loop
④在Windows XP操作系統(tǒng)下,使用水晶報(bào)表控件,顯示報(bào)表后,系統(tǒng)會在某個(gè)盤符的根目錄下,或者應(yīng)用程序所在的目錄下生成一些臨時(shí)文件,而報(bào)表關(guān)閉時(shí),這些臨時(shí)文件不會自動刪除,所以我們需要在顯示完報(bào)表后,刪除這些臨時(shí)文件,代碼如下:
On Error Resume Next
Kill App.Path + "\*.tmp"
Kill "c:\*.tmp"
Kill "d:\*.tmp"
Kill "e:\*.tmp"
5結(jié)束語
基于ActiveX技術(shù)的通用報(bào)表控件,有著較好的移植性和重用性,并可方便的嵌入到組態(tài)軟件中,彌補(bǔ)了組態(tài)軟件的報(bào)表功能缺陷,避免了報(bào)表的重復(fù)設(shè)計(jì)和代碼的重復(fù)編寫。該報(bào)表控件成功的在某自來水廠自動化工程的INTOUCH組態(tài)軟件中使用,該組件運(yùn)行可靠,解決了以往組態(tài)軟件缺少報(bào)表模塊的難題。

COPYRIGHT(C) 2011 廈門永宏亞得機(jī)電科技有限公司版權(quán)所有(閩ICP備05025945號) ALL RIGHTS RESERVED?

電話: 0592-5190891 傳真: 0592-5190720 E-Mail: E-mail:yade8895@163.com
地址: 廈門市海滄區(qū)興港六里17號2607室 郵編:361009 聯(lián)系人:翟先生