摘要:本文介紹了OLE技術(shù)的基本知識(shí),論述了利用OLE技術(shù)在PB中實(shí)現(xiàn)報(bào)表數(shù)據(jù)的統(tǒng)計(jì)。
關(guān)鍵詞:報(bào)表;OLE技術(shù);PB
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)09-11719-03
Implementation of PB Report Based on OLE
CHENG Yu1, ZHANG Xin-zhu2, YANG Jun-pu1
(1.Liaoning Provincial Party School, Shenyang 110004, China; 2.Lenovo(Shenyang) Co. Ltd, Shenyang 110004, China)
Abstract: This article introduces basic knowledge of OLE technology, also discusses application and relalization of data report in PB.
Key words: report; OLE technology; PowerBuilder
OLE是Object Linking Embedding(對象鏈結(jié)與嵌入)的縮寫,它可以使Windows應(yīng)用程序共享數(shù)據(jù)和程序。
OLE自動(dòng)化是不同應(yīng)用程序之間進(jìn)行通訊的一個(gè)標(biāo)準(zhǔn)。OLE自動(dòng)化的工作方式是:通訊被動(dòng)方(OLE服務(wù)器)應(yīng)用程序向通訊主動(dòng)方(OLE客戶機(jī))應(yīng)用程序提供一個(gè)以上可供其調(diào)用的OLE自動(dòng)化對象類型,OLE客戶機(jī)通過引用這些對象實(shí)現(xiàn)對OLE服務(wù)器的調(diào)用,然后通過設(shè)置對象的屬性和使用對象的方法操縱OLE服務(wù)器應(yīng)用程序,完成兩者之間的通訊。
在PB中OLE控件是一個(gè)OLE對象的包容器,可以使用服務(wù)器應(yīng)用程序提供的功能和命令來編輯對象,也可以使用自動(dòng)化OLE交互,在程序中激活對象和向服務(wù)器應(yīng)用程序發(fā)送命令;在PB 的Windows畫板中的OLE控件允許用戶從多個(gè)應(yīng)用程序嵌入和鏈接組件。
可以將OLE對象嵌入或者鏈接到自己的應(yīng)用程序中。嵌入對象的數(shù)據(jù)放在應(yīng)用程序中,在開發(fā)過程中這些數(shù)據(jù)放在應(yīng)用程序的PBl庫中,當(dāng)生成應(yīng)用后,這些數(shù)據(jù)將存放在exe或PBd文件中,雖然在程序的運(yùn)行過程中可以修改,但修改的數(shù)據(jù)不會(huì)保存;鏈結(jié)對象的數(shù)據(jù)存放在PB應(yīng)用程序以外,當(dāng)鏈結(jié)一個(gè)對象時(shí),在PB應(yīng)用程序中不存放數(shù)據(jù)文件,而是存放引用數(shù)據(jù)的指針,使用鏈接的數(shù)據(jù),對數(shù)據(jù)的管理和保存都由服務(wù)器應(yīng)用程序負(fù)責(zé)。這樣可以用服務(wù)器應(yīng)用程序修改處理數(shù)據(jù),處理后的數(shù)據(jù)可以保存回原文件中。鏈接方式應(yīng)用于需要多個(gè)應(yīng)用程序共享的數(shù)據(jù)文件,任何一個(gè)應(yīng)用程序修改了數(shù)據(jù)文件,都將影響到所有鏈接該文件的應(yīng)用程序。
1 OLE控件
1.1 建立和設(shè)置OLE控件
從Windows畫板中選擇OLE控件插入Windows。當(dāng)建立一個(gè)OLE控件并且插入一個(gè)對象時(shí),PB將激活服務(wù)器應(yīng)用程序以允許對對象進(jìn)行編輯和修改;在使OLE中的對象為非活動(dòng)狀態(tài)后,可以使用控件屬性選項(xiàng)卡來設(shè)置控件的屬性。
1.2 激活修改Window畫板中的OLE對象
在OLE控件的彈出菜單中選擇open可以激活畫板中OLE對象,使用服務(wù)器應(yīng)用程序修改OLE對象, 結(jié)束修改,使對象恢復(fù)為非活動(dòng)狀態(tài),只要單擊服務(wù)器應(yīng)用對象之外的任何區(qū)域即可,也可以直接關(guān)閉服務(wù)器應(yīng)用程序的窗口。
1.3 嵌入和鏈結(jié)OLE控件
可以將OLE對象嵌入或者鏈結(jié)到自己的應(yīng)用程序中。嵌入對象的數(shù)據(jù)放在應(yīng)用程序中,在開發(fā)過程中這些數(shù)據(jù)放在應(yīng)用程序的PBl庫中,當(dāng)生成應(yīng)用后,這些數(shù)據(jù)將存放在exe或PBd文件中,雖然在程序的運(yùn)行過程中可以修改,但修改的數(shù)據(jù)不會(huì)保存;鏈接對象的數(shù)據(jù)存放在PB應(yīng)用程序以外,當(dāng)鏈接一個(gè)對象時(shí),在PB應(yīng)用程序中不存放數(shù)據(jù)文件,而是存放引用數(shù)據(jù)的指針, 使用鏈結(jié)的數(shù)據(jù),對數(shù)據(jù)的管理和保存都由服務(wù)器應(yīng)用程序負(fù)責(zé)。這樣可以用服務(wù)器應(yīng)用程序修改處理數(shù)據(jù),處理后的數(shù)據(jù)可以保存回原文件中。鏈結(jié)方式應(yīng)用于需要多個(gè)應(yīng)用程序共享的數(shù)據(jù)文件,任何一個(gè)應(yīng)用程序修改了數(shù)據(jù)文件,都將影響到所有鏈接該文件的應(yīng)用程序。
1.4 OLE控件的激活方式
OLE控件的激活方式有offsite和in-place兩種激活方式,offsite激活方式是指在PB應(yīng)用程序的界面以外單獨(dú)打開OLE對象,in-place激活方式是指PB應(yīng)用程序的界面的原位置打開OLE對象。在數(shù)據(jù)窗口中的dbOLE默認(rèn)的是offsite激活方式,而Windows中的OLE默認(rèn)的激活方式是in-place。
在PB應(yīng)用程序中可以用命令
OLE_control.active(offsite) 或者OLE_control.active(in-place)設(shè)置OLE對象的以何種方式打開。
2 基于OLE技術(shù)的PB報(bào)表實(shí)現(xiàn)
Powerbuilder7.0是一個(gè)完全支持OLE自動(dòng)化的應(yīng)用程序開發(fā)工具。使用POWERBUILDER7.0,既可以編制做為OLE服務(wù)器的應(yīng)用程序,也可以編制作為OLE客戶機(jī)的應(yīng)用程序。
用戶要求報(bào)表管理模塊采用Excel表格,Excel報(bào)表生成后,用戶如果認(rèn)為生成的報(bào)表數(shù)據(jù)與實(shí)際不符,可以對報(bào)表進(jìn)行重新編輯,修改報(bào)表數(shù)據(jù)。
基于用戶的要求考慮,選擇使用Powerbuilder7.0調(diào)用OLE控件與Excel進(jìn)行通訊,達(dá)到用戶需求。以“地區(qū)供電量統(tǒng)計(jì)表”為例來說明Excel報(bào)表的實(shí)現(xiàn):
程序流程如下:
地區(qū)供電量報(bào)表模板為:
如果選擇的年份和月份分別為2006、12,程序運(yùn)行后,生成的結(jié)果報(bào)表見圖3。
程序核心代碼設(shè)計(jì)如下:
ole_1.insertfile(\"c:\\report\\地區(qū)供電量月報(bào).xls\")
ole_1.object.worksheets(\"sheet1\").cells(1,35).value=\"\"+string(nf)+\"年\"+string(yf)+\"月地區(qū)供電量統(tǒng)計(jì)表\"
if retn<>1 then
int i
string meter_name
decimal{2} sumcoul,topcoul,botcoul,fltcoul
setpointer(hourglass!)
for i= 7 to 21
meter_name=string(ole_1.object.worksheets(\"sheet1\").cells(i,3).value)
SELECT (sum(DayCoul.PosSumPCoul/100))/100
into:sumcoul,
FROMDayCoul,MeterConfig
WHERE DayCoul.CountryID=MeterConfig.CountryIDand
DayCoul.RTUID=MeterConfig.RTUID and
DayCoul.MeterID=MeterConfig.MeterID and
MeterConfig.MeterName=:meter_name and
DayCoul.Year=:nf and
DayCoul.Mon=:yf;
ole_1.object.worksheets(\"sheet1\").cells(i,4).value=sumcoul
next
setpointer(arrow!)
end if
數(shù)據(jù)寫入報(bào)表模板后,以offsite方式激活OLE控件:
ole_1.activate(offsite!)
此時(shí)用戶可對報(bào)表數(shù)據(jù)進(jìn)行必要的編輯。
3 報(bào)表制作模塊的運(yùn)行情況
報(bào)表制作專工的習(xí)慣方式是使用Excel制作各種報(bào)表,此程序在不改變其習(xí)慣工作方式的前提下,利用PowerBuilder 向OLE控件里的報(bào)表模板里寫入統(tǒng)計(jì)數(shù)據(jù),而且用戶可以對報(bào)表數(shù)據(jù)進(jìn)行必要的編輯。
以往報(bào)表制作專工月底計(jì)算各類報(bào)表時(shí),采用計(jì)數(shù)器計(jì)算表底數(shù),需要進(jìn)行大量的重復(fù)性的手工計(jì)算,往往需要4-5天的時(shí)間,并且及時(shí)錯(cuò)誤較多,需要反復(fù)核對、修改。
現(xiàn)在,利用此“報(bào)表制作功能模塊”,可以將報(bào)表制作人員從繁瑣的手工勞動(dòng)中解脫出來,大量的重復(fù)數(shù)值計(jì)算由計(jì)算軟件完成,報(bào)表制作人員可以集中精力思考如何降低線損、網(wǎng)損,提供供電可靠性、提高經(jīng)濟(jì)效益。另一方面,可以對報(bào)表制作工作進(jìn)行規(guī)范化管理,提高調(diào)度部門現(xiàn)代化管理水平。