侯軍燕
[摘要]介紹windows環(huán)境下DDE技術(shù)的原理,以及DDE在PB和EXCEL中的應用,并通過實例-利用DDE在EXCEL中輸出PB數(shù)據(jù)并同步打印來說明PB與EXCEL的數(shù)據(jù)通訊。
[關(guān)鍵詞]DDE 應用程序名 主題名 項目名
中圖分類號:TN92文獻標識碼:A文章編號:1671-7597(2009)0310031-01
一、引言
PowerBuilder是一種強有力的企業(yè)級數(shù)據(jù)庫應用系統(tǒng)開發(fā)工具,利用它可以方便地開發(fā)出數(shù)據(jù)庫系統(tǒng)的前臺應用軟件。但由于用PB所開發(fā)的報表具有一定的局限性:報表的表頭、列寬以及單元格的背景顏色和字體等都不能在應用程序中由用戶來進行調(diào)整。而Excel是Microsoft公司的專業(yè)的表格處理軟件。我們可以利用DDE技術(shù),通過按鈕響應來實現(xiàn)在PB中把數(shù)據(jù)庫中的數(shù)據(jù)傳送到Excel中,以便由用戶在Excel中調(diào)整打印報表。
二、正文
(一)DDE技術(shù)簡介
DDE英文全稱是DynamicDataExchange,中文叫動態(tài)數(shù)據(jù)交換,它是微軟公司為在應用程序之間傳遞數(shù)據(jù)所制定的第一個標準。DDE用于在Windows平臺上的兩個正在運行的應用程序之間動態(tài)交換數(shù)據(jù),它是一種在Windows操作系統(tǒng)中基于消息的協(xié)議。動態(tài)數(shù)據(jù)交換總是發(fā)生在兩個正在運行的程序之間,在這兩個應用程序之間相互發(fā)送和接收命令及數(shù)據(jù)。這兩個正在運行的程序分別稱為客戶程序和服務(wù)器程序。
(二)DDE技術(shù)在PB和EXCEL中的應用
Powbuilder支持DDE技術(shù),它既可以是用來提供數(shù)據(jù)和功能的DDE服務(wù)器,也可以是用來請求和顯示數(shù)據(jù)的DDE客戶端。它的內(nèi)部提供了一系列的PowerSript函數(shù),通過調(diào)用內(nèi)置函數(shù)和處理事件來實現(xiàn)相互之間的通信。當命令或數(shù)據(jù)從客戶傳向服務(wù)器或從服務(wù)器傳向客戶端時,將會出發(fā)生DDE事件。同樣,EXCEL也是一個支持DDE的應用程序,它一般用來作為DDE的服務(wù)器端。
由于通常一個應用程序可以和多個服務(wù)器進行數(shù)據(jù)通信,為了使DDE客戶程序能夠唯一標志一個DDE服務(wù)器應用程序,DDE使用一種約定的命名方法來標志服務(wù)器應用程序,這種命名方法包括了:應用程序名、主題名和項目名。應用程序名用于指出特定的DDE服務(wù)器應用程序名,如Excel代表Microsoft Excel,而主題名則進一步確定當前應用程序與DDE服務(wù)器會話的主題內(nèi)容,例如對EXCEL程序來說,它的主題名是指一個具體的工作表文檔名。而項目名則是為了進一步確定預制通信的內(nèi)容,對EXCEL程序是指工作表中的具體單元格名。
(三)PowerBuilder與Excel利用DDE技術(shù)傳遞數(shù)據(jù)實例
在這個實例中PB作為通信的客戶端,而Excel作為通信的服務(wù)器端。在PB窗口中放一個數(shù)據(jù)控件用來存放數(shù)據(jù)窗口中的數(shù)據(jù)。并放置五個按鈕,前三個按鈕標題是插入、刪除和更新,是對數(shù)據(jù)的操縱。第四個按鈕標題是打開預設(shè)文件,第五個按鈕標題是“保存數(shù)據(jù)到預設(shè)文件并打印”,在這兩個按鈕上加單擊事件腳本來實現(xiàn)DDE技術(shù)。其次,我們還需建立一個EXCEL文件取名為chengji.xls,并在此文件中設(shè)置好表頭和單元格樣式以及求和和求平均公式。
在兩個應用程序進行數(shù)據(jù)傳遞之前,首先要使兩個應用程序都啟動才行。PB應用程序顯然已啟動,啟動excel文件的程序如下,如run("c:program filesMicrosoft officeofficeExcel.exe+chengji.
xls",minimized!)。然后開始在PB中和excel中建立DDE連接以便進行動態(tài)數(shù)據(jù)交換。DDE客戶端與服務(wù)器端的連接共有三種:冷連接、暖連接和熱連接。根據(jù)三種連接的優(yōu)劣性進行比較選用了暖連接。程序如下:
handle=OpenChannel("Excel","chengji.xls")
for I= 1 to n
SetRemote("r"+string(I+1)+"c1",string(dw_1.getitemnumber(I,1)),handle)
SetRemote("r"+string(I+1)+"c2",dw_1.getitemstring(I,2),handle)
SetRemote("r"+string(I+1)+"c3",string(dw_1.getitemnumber(I,3)),handle)
SetRemote("r"+string(I+1)+"c4",string(dw_1.getitemnumber(I,4)),handle)
SetRemote("r"+string(I+1)+"c5",string(dw_1.getitemnumber(I,5)),handle)
SetRemote("r"+string(I+1)+"c6",string(dw_1.getitemnumber(I,6)),handle)
SetRemote("r"+string(I+1)+"c7",string(dw_1.getitemnumber(I,7)),handle)
next
在應用程序之間除了可以動態(tài)交換數(shù)據(jù)外,還可以執(zhí)行遠程DDE命令實用函數(shù)ExecRemote。如下:
ExecRemote("[print()]",handle)
ExecRemote("[close(true)]",handle)
ExecRemote("[quit()]","Excel","system")
最后是關(guān)閉dde連接的程序:CloseChannel(handle)。
三、總結(jié)
雖然DDE技術(shù)并不是一種新技術(shù),而且它在逐漸被OLE技術(shù)所代替,DDE其實是OLE技術(shù)的前身,而且DDE的語法很好理解,程序的運行速度也比較快,是一種方便且簡單易學的技術(shù)。
參考文獻:
[1]王晟,PowerBuilder數(shù)據(jù)庫開發(fā)經(jīng)典案例解析[M].清華大學出版社,2005(04).
[2]沈良忠,PowerBuilder數(shù)據(jù)庫開發(fā)教程[M].電子工業(yè)出版社,2008(03).