明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

用Powerbuilder開發(fā)WEB數(shù)據(jù)庫

[摘要]流星雨 一、引言 我們知道,現(xiàn)在隨著Internet應(yīng)用的不斷深化,人們對Web服務(wù)器所查詢的信息就不僅僅限于以文件方式存放于服務(wù)器端的靜態(tài)超文本文件。有時(shí)需要借助關(guān)系新數(shù)據(jù)庫來存放變化的數(shù)據(jù),并...
流星雨  

一、引言
我們知道,現(xiàn)在隨著Internet應(yīng)用的不斷深化,人們對Web服務(wù)器所查詢的信息就不僅僅限于以文件方式存放于服務(wù)器端的靜態(tài)超文本文件。有時(shí)需要借助關(guān)系新數(shù)據(jù)庫來存放變化的數(shù)據(jù),并在Web服務(wù)器于數(shù)據(jù)庫服務(wù)器之間以CGI等方法建立兩者的連接,使Web服務(wù)器能夠?qū)崿F(xiàn)對數(shù)據(jù)庫的動(dòng)態(tài)的及時(shí)的查詢,并將最新的數(shù)據(jù)(結(jié)果)返回給瀏覽器。
于是在Internet應(yīng)用中就出現(xiàn)了如圖1所示的這樣一種結(jié)構(gòu)。

圖1 客戶瀏覽器—Web服務(wù)器—數(shù)據(jù)庫服務(wù)器三級結(jié)構(gòu)
當(dāng)然這一結(jié)構(gòu)的實(shí)現(xiàn),用ASP等開發(fā)網(wǎng)絡(luò)數(shù)據(jù)庫的軟件也能夠?qū)崿F(xiàn),并且正在成為日益流行的趨勢,但是對于已經(jīng)擁有大量用戶的PB來說,其對Internet的支持就可以讓PB用戶迅速轉(zhuǎn)移到Web的開發(fā)上來而不需要再重新學(xué)習(xí)一門語言。
另外,我們?nèi)绻陨粤粜牡脑捑筒浑y發(fā)現(xiàn),現(xiàn)在用PB開發(fā)出來的所謂的MIS系統(tǒng)千篇一律幾乎都是一個(gè)模式:用戶先登錄,進(jìn)入系統(tǒng)后出現(xiàn)一個(gè)MDI窗口,帶有數(shù)項(xiàng)菜單,菜單下面又有若干菜單,通過菜單打開一個(gè)個(gè)窗口……當(dāng)然并不是說這種傳統(tǒng)的方式有什么缺點(diǎn),只是它和當(dāng)今正日益流行的網(wǎng)頁的形式比較起來,還是遜色不少,網(wǎng)頁的友好形式更受廣大用戶的歡迎。而PB的Web方式正是迎合了當(dāng)今Internet時(shí)代發(fā)展的潮流——可以用網(wǎng)頁的形式再現(xiàn)PB的傳統(tǒng)強(qiáng)大功能。
而且,隨著越來越多的企事業(yè)單位上網(wǎng),很多單位不僅僅要有自己的一套MIS系統(tǒng),而且還迫切需要開發(fā)自己的網(wǎng)絡(luò)數(shù)據(jù)庫系統(tǒng),來向外界更好的宣傳自己。這時(shí)候一般的選擇往往是這兩種系統(tǒng)各自獨(dú)立的開發(fā)一套,不可避免地造成了一定程度的浪費(fèi)。并且這兩種系統(tǒng)的開發(fā)商是同一家還好,若是兩家開發(fā)商,那么在不同的時(shí)候還要進(jìn)行不斷的協(xié)商,這不能不說又是一種浪費(fèi)。如果能有一種方法可以把兩種系統(tǒng)最大限度的把兩種系統(tǒng)結(jié)合起來,就能夠節(jié)約各種財(cái)力、人力和物力,還會大大提高辦公效率。  
二、PB6.0/6.5的Internet Developer Toolkit(IDT)
經(jīng)典的開發(fā)工具PB6.0/6.5,對Internet支持可以說是它的一個(gè)主要特性,可以說這是在IDT基礎(chǔ)上的一個(gè)全新的飛躍。通過將IDT(Internet Developer Toolkit)工具集成到PB的開發(fā)環(huán)境中,通過這些工具,開發(fā)人員可以將現(xiàn)有的一些應(yīng)用移植到Internet中,也可以開發(fā)新的面向Internet的應(yīng)用。
在圖1所示的的結(jié)構(gòu)下,PB提供了Internet應(yīng)用的兩種訪問方式。這兩種訪問方式是:
;赑lugin(插入件)的Client/Server方式
;赪eb.PB的Browser/Server方式
對應(yīng)于這兩種方式,主要是在IDT上選擇的不同。
采用PB的IDT開發(fā)應(yīng)用的方法和PB的一般應(yīng)用的開發(fā)方法是類似的,通過這些工具,可以將現(xiàn)有的一些應(yīng)用移植到Internet中,也可以開發(fā)新的面向Internet的應(yīng)用。
在PB6.0/6.5中,提供了Web.PB、DataWindow Plug-in、Window Plug-in和Window Active等一系列面向Internet的工具,每個(gè)工具所實(shí)現(xiàn)的功能、所依賴的平臺都不盡相同。PB的IDT主要有三種部件:
1.DataWindow Plugin
使用該P(yáng)lugin可以在IE或者Netscape等瀏覽器中直接查看用PowerBuilder的Datawindow生成的報(bào)表--PSR格式的文件。當(dāng)然不能直接修改了,也不是動(dòng)態(tài)生成的。而是閱讀已經(jīng)生成好并存下來的文件。
2. Window Plugin
這個(gè)Plugin可就不是僅僅顯示靜態(tài)數(shù)據(jù)了。它在瀏覽器中中運(yùn)行PB生成的Child Window,而這個(gè)Child Window是包含在PB的動(dòng)態(tài)連接庫(PBD)中傳送過來的。用起來就象獨(dú)立的PB程序一樣,可以有數(shù)據(jù)窗口、OLE、OCX等各種各樣的控制,可以遠(yuǎn)程操作數(shù)據(jù)庫?梢詷O大的發(fā)揮PB的功能。
3. WEB.PB
Web.PB是用來開發(fā)基于Web應(yīng)用的基本部件,該部件本身就是Web上的一個(gè)網(wǎng)關(guān)應(yīng)用程序。該工具提供從 Web服務(wù)器到PowerBuilder應(yīng)用服務(wù)器的訪問,允許用戶在 Internet以及Intranet下,通過Web對數(shù)據(jù)庫進(jìn)行近于完全的操縱。同時(shí),通過Web.PB,動(dòng)態(tài)創(chuàng)建HTML文文件亦成為可能。Web.PB程序是Web服務(wù)器和 PowerBuilder應(yīng)用服務(wù)器相連接的橋梁。它支持CGI、ISAPI、NSAPI、MSAPI等多種網(wǎng)關(guān)程序接口。
不管怎么樣,必須要明確這樣一個(gè)結(jié)論,PB的Internet應(yīng)用開發(fā)是由兩個(gè)部分組成的,一個(gè)是面向服務(wù)器的應(yīng)用程序,主要采用的是Web.PB技術(shù)。另外一個(gè)是面向客戶端的技術(shù),包括各種內(nèi)插件和ActiveX技術(shù)。這是兩種不同的技術(shù)路線,在實(shí)施的時(shí)候,必須加以充分的考慮。從另外一個(gè)角度可以看出,各種內(nèi)插件和ActiveX技術(shù)是為了將現(xiàn)有的應(yīng)用擴(kuò)展到Internet中去,而Web.PB主要是面向新應(yīng)用的開發(fā)。當(dāng)然這也不是絕對的,Plug-in技術(shù)照樣可以開發(fā)新的應(yīng)用特別是Intranet的應(yīng)用。
三、開發(fā)策略的選擇
1.PB6.5的Internet/Intranet總體計(jì)劃實(shí)施策略選擇
現(xiàn)在好象一直存在著“瘦客戶端”和“胖客戶端”的爭論,這里不評價(jià)這兩者的優(yōu)劣,但是這肯定是實(shí)施策略時(shí)要考慮到的問題。如果希望采用純的“瘦客戶端”,那么兩種Pug-in技術(shù)和Active技術(shù)就不是最好的選擇。
采用“瘦客戶機(jī)” 策略——即Web.PB方式,能夠減少在客戶端軟件方面的投資,因?yàn)檫@種瘦客戶機(jī)一般只需要瀏覽器這種核心部件。另外,瘦客戶機(jī)對計(jì)算機(jī)的性能要求也比較低,不需要客戶機(jī)承擔(dān)多少運(yùn)算的負(fù)載,大量的運(yùn)算任務(wù)都由服務(wù)器來承擔(dān)。
如果采用“中間”策略,那么,可以在客戶端加載Plug-in和ActiveX(現(xiàn)在的瀏覽器一般都支持這種技術(shù)),并且支持MINE格式的內(nèi)容。這樣一來,客戶即便能夠承擔(dān)一些表現(xiàn)邏輯方面的任務(wù)。但是,業(yè)務(wù)邏輯的大部分運(yùn)算任務(wù)仍然在服務(wù)器端完成。這種其實(shí)就是Window Plug-in方式,它尤其適用于Intranet網(wǎng)中。
最后一種是傳統(tǒng)的C/S策略,其實(shí)就是“胖客戶”方式。由于大部分程序都駐留在客戶端,它對客戶機(jī)的要求也很高。這種方式在現(xiàn)在的Intranet中估計(jì)遲早要被淘汰。
在具體的IDT工具的選擇策略上,主要有三個(gè)方面的選擇:
1)如果是需要實(shí)現(xiàn)客戶端訪問數(shù)據(jù)庫并在客戶機(jī)上進(jìn)行業(yè)務(wù)處理,最好使用Window Plug-in,它不僅可以最大限度地發(fā)揮PB的強(qiáng)大功能,而且對用戶非常友好,告別老套的菜單走向了豐富多彩的網(wǎng)頁形式。
2)如果客戶端需要預(yù)先編制好的報(bào)表,應(yīng)采用DataWindow Plug-in為上佳。它能夠在瀏覽器內(nèi)顯示已經(jīng)生成并存儲在Web服務(wù)器上的PSR報(bào)表。因?yàn)檫@個(gè)報(bào)表是預(yù)先生成的,所以不需要訪問數(shù)據(jù)庫。用戶可以在瀏覽器內(nèi)查看、打印和保存報(bào)表。PSR報(bào)表的格式多樣,能夠給WWW瀏覽增添不少風(fēng)采。
3)如果需要使用集中控制的數(shù)據(jù)庫和業(yè)務(wù)邏輯程序,那么最好使用Web.PB。
2.開發(fā)系統(tǒng)具體策略的考慮及分布式的介紹
由于要建立的Web方式的圖書館系統(tǒng)主要是基于Intranet的,結(jié)合上面所說的幾種考慮,因此大部分應(yīng)用就采用了Window Plug-in的方式,這不僅能體現(xiàn)PB一向的強(qiáng)大功能,而且能充分讓你去發(fā)揮其功能,把MIS系統(tǒng)管理和豐富多彩的網(wǎng)頁結(jié)合起來了。
Web服務(wù)器用的是微軟的PWS(Personal Web Server),Web.PB用的是PBCGI60.EXE(表示是CGI標(biāo)準(zhǔn)),Sybase數(shù)據(jù)庫,NT平臺。
開發(fā)過程中大量使用了數(shù)據(jù)庫連接,單、多條件數(shù)據(jù)查詢以及各種控件的.Visible屬性,尤其是在Tab控件中用到了selectionchanged事件的newindex屬性(以便每重新點(diǎn)擊一個(gè)Tabpage可以重新操作而不受以前操作的影響),大大增強(qiáng)了表現(xiàn)效果。
還要補(bǔ)充一點(diǎn)的是,在建立應(yīng)用的過程中要注意的一點(diǎn)是不要使用全局對象,特別是在child窗口不能用SQLCA作為事物對象(它應(yīng)該算一個(gè)全局變量,Window Plug-in方式不支持全局變量),一定要重新自定義一個(gè)事物對象mytransaction。若使用SQLCA單獨(dú)運(yùn)行窗口還可以,一旦要在客戶端瀏覽器中出現(xiàn)肯定會報(bào)錯(cuò),而在這兒幾乎沒有哪本參考書特意強(qiáng)調(diào)過,初學(xué)者創(chuàng)建自己的應(yīng)用時(shí)很容易在此走彎路。
以上只算是建立了PB的應(yīng)用程序,還要做的有:生成.PBD文件并放到web共享目錄下;編寫HTML語句嵌入窗口,放到服務(wù)器目錄下,這里的關(guān)鍵性的HTML語句是:
<body> <embed src=cgi-pbd/books.pbd width=700 height=600 window=w_bugao> </body>
Web.PB是基于PowerBuilder分布式應(yīng)用技術(shù)之上的,Web.PB替代了客戶端的代理而已。在PB分布式應(yīng)用中,PB客戶應(yīng)用和PB服務(wù)器應(yīng)用程序之間的對象分布如所圖2所示。

圖 2
使用Web.PB進(jìn)行基于服務(wù)器的開發(fā),可以讓PB建立基于服務(wù)器的Web應(yīng)用,允許Web瀏覽器訪問分布式PB應(yīng)用程序的服務(wù)。這些分布式的基于服務(wù)器的應(yīng)用程序可以動(dòng)態(tài)生成HTML頁或?qū)TML發(fā)送到Web瀏覽器。這允許用戶支持真正的“瘦”客戶機(jī)體系,也就是在客戶機(jī)上只需一個(gè)瀏覽器。這種方式也可以稱為純的Browser/Server方式。
如圖2所示,客戶端通過Proxy對象定義服務(wù)器應(yīng)用程序之中的應(yīng)用對象。而Web.PB不同于傳統(tǒng)的客戶端應(yīng)用,Web.PB不同于傳統(tǒng)的客戶端應(yīng)用,Web.PB文件取代了客戶端的應(yīng)用程序,起作用相當(dāng)于訪問服務(wù)器應(yīng)用程序的接口。在瀏覽器中,用戶可以訪問分布式PB應(yīng)用程序中的任何不可視對象的屬性和方法。用戶還可以向方法傳遞參數(shù)。Web服務(wù)器與Web.PB通信將這些信息發(fā)送給分布式PB應(yīng)用程序,應(yīng)用程序會執(zhí)行方法并將結(jié)果以動(dòng)態(tài)HTML的形式返回給瀏覽器。
建立Web.PB應(yīng)用的過程如下:
a. 建立并測試服務(wù)應(yīng)用(這里是pb_net)
·創(chuàng)建應(yīng)用對象
·創(chuàng)建應(yīng)用啟動(dòng)窗口
·創(chuàng)建傳輸對象
·創(chuàng)建不可視用戶對象
·編寫用戶對象函數(shù)
b. 編寫可調(diào)用服務(wù)應(yīng)用的HTML頁面,這可通過FrontPage等主頁編輯器,也可通過Web.PB的編程WIZARD來做。
c. 將應(yīng)用編譯成可執(zhí)行文件。
d. 編輯Web.PB的幾個(gè)初始化文件
e. 設(shè)置Web服務(wù)器(主要是文件類型和Web目錄的設(shè)置等)
f. 啟動(dòng)服務(wù)應(yīng)用和Web服務(wù)器。
g. 用瀏覽器訪問應(yīng)用。
服務(wù)應(yīng)用的編寫和分布式應(yīng)用類似,就不再贅述。這里需要補(bǔ)充一點(diǎn)的是,編寫用戶對象是Web.PB應(yīng)用中的頭等大事,并且Web.PB中的數(shù)據(jù)窗口一般用的都是Datastore。這里創(chuàng)建了一個(gè)用戶對象uo_pbdemo,實(shí)際上用戶對象應(yīng)該盡量要?jiǎng)?chuàng)建的多才好,特別是在那些大型的應(yīng)用中。
Web.PB方式的應(yīng)用都是通過HTML中的錨點(diǎn)Anchor(<A>)定義的超鏈接或者是FORM(<FORM>)元素的可輸入域中鍵入信息后單擊Submit按鈕(定義的也有超鏈接)來激活Web.PB實(shí)現(xiàn)的。而這些超鏈接的對象形式上都是指向各個(gè)用戶對象中的函數(shù)的(這些函數(shù)的返回值均是一系列的HTML文文件),這一點(diǎn)務(wù)必要明確,其實(shí)這一點(diǎn)也是Web.PB方式的核心思想概念所在。
這里uo_pbdemo建立了數(shù)個(gè)函數(shù),挑出頗具代表性的一個(gè)的描述如下:
//從數(shù)據(jù)庫中提取新書介紹
//f_retrieve_newbooks()無參數(shù),返回值是string類型的
string ls_html
string ls_search_arg
long ll_rows_retrieved

ds_names = CREATE datastore
ds_names.dataobject="d_newbooks"
ds_names.settransobject(gtr_trans)
ll_rows_retrieved= ds_names.retrieve()
IF ll_rows_retrieved > 0 THEN
ls_html=ds_names.object.datawindow.data.htmltable
ELSE
ls_html = '此次找不到新書!'
END IF
RETURN ls_html
這是非常關(guān)鍵的一段代碼,其實(shí)就是調(diào)用了數(shù)據(jù)窗口的htmltable屬性而已,要知道這種思想可以說是貫穿了整個(gè)Web.PB應(yīng)用的全過程。
啟動(dòng)瀏覽器就可以檢索到新書了。當(dāng)然還有一個(gè)前提是:服務(wù)器確定是在監(jiān)聽,即剛建立的pb_inet應(yīng)用必須在運(yùn)行中。
最后還要在服務(wù)器端配置幾個(gè)INI文件:Hosts文件、services文件和PBWEB.INI文件,當(dāng)然這項(xiàng)工作實(shí)際上應(yīng)該在整個(gè)工作之前所做的。
四、對三種開發(fā)方式的總結(jié)
1.關(guān)于Window Plug-in的幾點(diǎn)體會
1)Window Plug-in最適用于Intranet網(wǎng),前面提到過原因,因?yàn)樾枰獮g覽器的支持,而且需要在瀏覽器端安裝程序文件。另外一個(gè)原因就是,Window Plug-in主要的執(zhí)行環(huán)境還是瀏覽器本身所在的本地機(jī)環(huán)境,只有在內(nèi)部網(wǎng)的情況下,才能夠?qū)?yīng)用執(zhí)行的環(huán)境進(jìn)行比較好的控制,避免出錯(cuò)。
2)Window Plug-in適用于在瀏覽器端有比較復(fù)雜的用戶接口的情況,可避免編寫大量的HTML和CGI程序。開發(fā)Internet經(jīng)常遇到的一個(gè)難題就是在客戶端沒有足夠的組件,F(xiàn)在,有了Window Plug-in,只要愿意,就能把獨(dú)立的PB應(yīng)用程序轉(zhuǎn)移到瀏覽器中來執(zhí)行。
3)并且,Window Plug-in移植和修改現(xiàn)有的應(yīng)用程序到Web上也可以說是不費(fèi)什么力氣,還可以充分享受數(shù)據(jù)窗口的強(qiáng)大功能。
4)在Intranet環(huán)境下,安全等因素就不是那么重要了,可允許應(yīng)用程序訪問客戶機(jī)的磁盤,使用戶能夠?qū)⒈镜氐馁Y源和服務(wù)器的資源結(jié)合起來應(yīng)用。
5)筆者看來,這三種IDT中,Window Plug-in方式是最值得用的。
2. 關(guān)于DataWindow Plug-in的幾點(diǎn)體會
1)DataWindow Plug-in可以在Web上發(fā)布復(fù)雜的報(bào)表,加快向Web用戶的發(fā)布。
2)它克服了HTML的限制,提供復(fù)雜的報(bào)表,包括列表形式、交叉表形式和圖形方式等。
3)它沒有安全限制,因?yàn)镻SR文件是制度的,而這個(gè)報(bào)表并不在本地
運(yùn)行。PSR報(bào)表在瀏覽器中除了顯示之外,只能夠運(yùn)行保存數(shù)據(jù)和打印兩種功能,因此是十分安全的。
4)DataWindow Plug-in時(shí)靜態(tài)顯示報(bào)表的一種方法,無法直接修改這種方法顯示的數(shù)據(jù)和報(bào)表格式,但可以在一個(gè)中央位置更新報(bào)表。
5)PSR格式的報(bào)表能夠包含多種顯示風(fēng)格的數(shù)據(jù)窗口,但在DataWindow Plug-in中,不支持Rich Text格式的報(bào)表。
3.Web.PB構(gòu)建Web應(yīng)用有如下優(yōu)點(diǎn):
a. 支持CGI、ISAPI、NSAPI、MSAPI等多種網(wǎng)關(guān)程序接口。
b. 支持PowerBuilder中數(shù)據(jù)窗口的引用。
c. 易于將以前編寫的PowerBuilder應(yīng)用移植到Web環(huán)境下。
d. 易于創(chuàng)建嵌入PowerBuilder應(yīng)用程序的HTML文件,應(yīng)用服務(wù)器在運(yùn)行環(huán)境下,將根據(jù)用戶需求, 動(dòng)態(tài)生成HTML語法,發(fā)布完全動(dòng)態(tài)的信息。
e. 支持?jǐn)?shù)據(jù)庫連接。PowerBuilder所能夠連接到的數(shù)據(jù)庫都可以被瀏覽器用戶訪問到,使得 Web服務(wù)與數(shù)據(jù)庫服務(wù)通過Powerbuilder 6.0完整地結(jié)合起來。
另外,談一點(diǎn)對Web.PB的不足之處。雖然說Sybase公司極力地讓PB支持Web方式并且采取了很多方案其中一種就是其引以為豪的Web.PB,的確,Web.PB在網(wǎng)絡(luò)數(shù)據(jù)庫方面確實(shí)有不小的成績,可以采用集中式數(shù)據(jù)庫管理。但它在開發(fā)網(wǎng)絡(luò)數(shù)據(jù)庫方面也絕不會成為流行的趨勢,它開發(fā)初衷就是主要面對廣大PB的老用戶的(老用戶更容易上手),而且它在頁面的開發(fā)上過于單調(diào),且不說動(dòng)態(tài)性不強(qiáng),光是一大堆類庫函數(shù),加上每個(gè)函數(shù)還有數(shù)個(gè)參數(shù),而且創(chuàng)建頁面其實(shí)比手寫HTML語言還要辛苦(因?yàn)樗祷匾粋(gè)完整的字符串到瀏覽器)。聯(lián)想到當(dāng)今的社會發(fā)展非常注重效率,很難設(shè)想從頭單純學(xué)習(xí)PB的IDT而僅僅為了編輯過于普通的網(wǎng)頁和開發(fā)網(wǎng)絡(luò)數(shù)據(jù)庫。因此在這方面也就是說Web.PB廣泛推廣的價(jià)值不大,但是對于已經(jīng)掌握了PB的開發(fā)用戶來說,如果不想學(xué)習(xí)新的語言或工具,用Web.PB開發(fā)也是一個(gè)很好的選擇。

注:雖然當(dāng)今PB已經(jīng)發(fā)展到8.0版本,但是仍然有很多的開發(fā)者依舊用著他們認(rèn)為是最為經(jīng)典的6.0/6.5版本。本文基本上是在6.5版本上運(yùn)行的,筆者認(rèn)為卻一點(diǎn)都不過時(shí),因?yàn)橛押玫膚eb風(fēng)格的窗口肯定是大勢所趨。