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