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

使用POWERBUILDER開發(fā)數(shù)據(jù)庫的WEB查詢

[摘要]一、WEB.PB的工作原理 POWERBUILDER對(duì)分布式計(jì)算的支持使得它能夠通過INTERNET/INTRANET來調(diào)用遠(yuǎn)程對(duì)象服務(wù)。通過WEB.PB,可以將POWERBILDER的分布式計(jì)算能...
一、WEB.PB的工作原理

POWERBUILDER對(duì)分布式計(jì)算的支持使得它能夠通過INTERNET/INTRANET來調(diào)用遠(yuǎn)程對(duì)象服務(wù)。通過WEB.PB,可以將POWERBILDER的分布式計(jì)算能力擴(kuò)展到WWW網(wǎng)中。WEB.PB允許服務(wù)器動(dòng)態(tài)地將內(nèi)容轉(zhuǎn)換成HTML傳送到客戶端的瀏覽器中。當(dāng)一個(gè)HTML文檔調(diào)用了一個(gè)遠(yuǎn)程對(duì)象的方法或者函數(shù)時(shí),WEB.PB將請(qǐng)求結(jié)果傳送給POWERBUILDER的服務(wù)應(yīng)用,由POWERBUILDER的服務(wù)應(yīng)用執(zhí)行相應(yīng)的代碼,并將結(jié)果返回給瀏覽器。這就是WEB.PB的工作原理,它實(shí)際上是通過網(wǎng)關(guān)接口(CGI)來調(diào)用PB應(yīng)用服務(wù)的。在HTML中有兩個(gè)標(biāo)簽,可以用來調(diào)用PB的應(yīng)用服務(wù):窗體< FORM >和錨點(diǎn)< A >,前者是在窗體命令中激活一個(gè)PB應(yīng)用,后者是通過調(diào)用超鏈接來指向PB應(yīng)用的。

二、系統(tǒng)的運(yùn)行環(huán)境

合肥市電信局網(wǎng)管中心目前運(yùn)行的電話網(wǎng)網(wǎng)管系統(tǒng)有本地網(wǎng)集中監(jiān)控和維護(hù)系統(tǒng)和長途網(wǎng)管系統(tǒng),其中本地網(wǎng)網(wǎng)管系統(tǒng)采用安徽省自行開發(fā)的一套系統(tǒng),服務(wù)器為ALPHA 4000小型機(jī),操作系統(tǒng)為Digital Unix 64,長途網(wǎng)管采用郵電部電信總局統(tǒng)一開發(fā)的ROMA系統(tǒng),操作系統(tǒng)為SCO UNIX,數(shù)據(jù)庫均為SYBASE SQL SERVER。我們另外采用了一臺(tái)IBM Netfinity 3000作為WEB服務(wù)器,采用Microsoft Windows NT 4.0為操作系統(tǒng), IIS4.0提供WWW服務(wù)。在安裝POWERBUILDER 6.0時(shí)選擇自定義安裝,然后選擇Internet Tools中的WEB.PB選項(xiàng)即可。

三、配置IIS服務(wù)器

Microsoft Internet Information Server(IIS)的主目錄下有一個(gè)子目錄\scrips,這是IIS用來存放CGI程序的目錄。如果需要使用標(biāo)準(zhǔn)CGI程序,則將\PB6\IT\BIN\PBCGI60.EXE復(fù)制到這個(gè)目錄下即可,如果使用ISAPI接口,則需要復(fù)制的文件是pbisa60.dll。

但是為了保證服務(wù)能正常運(yùn)行,還必須自行查看IIS服務(wù)的目錄映像表,其步驟如下:

1、確定IIS已經(jīng)安裝且運(yùn)行正常。

2、運(yùn)行Internet Service Manager程序。

3、選擇需要安裝配置的Web服務(wù)(IIS支持多種服務(wù),并能夠?qū)Χ嗯_(tái)計(jì)算機(jī)的服務(wù)進(jìn)行管理)。

4、從菜單條中選擇屬性菜單下的服務(wù)屬性菜單項(xiàng)。

5、選擇Directories頁。

6、確定有一個(gè)別名為/scripts/的目錄項(xiàng)(別名即虛擬目錄名)。

7、選擇/scripts/,并單擊Properties按鈕。

8、確定Execute是在Access組中唯一被選中的項(xiàng)目(在這個(gè)目錄中不允許客戶機(jī)執(zhí)行讀寫操作)。

9、如果對(duì)屬性作了修改,選擇OK進(jìn)行保存。

10、如果沒有/scripts目錄,可以添加一個(gè)。

四、編輯hosts 和 services 文件

采用任何一個(gè)文本編輯器,編輯這兩個(gè)文件。通常hosts文件在c:\winnt\system32\driver\etc目錄下,添加下面一行:

134.65.5.212 HFSA

其中HFSA為主機(jī)名,134.65.5.212為IP地址。

在c:\winnt\services文件中添加下面一行

myapp 100015/tcp

這一行的意義在于將所創(chuàng)立的PB服務(wù)添加到Windows的服務(wù)注冊文件中。使用TCP/IP協(xié)議的應(yīng)用程序都需要使用一個(gè)端口,服務(wù)應(yīng)用程序?qū)⒃谶@個(gè)端口布置一個(gè)監(jiān)聽程序,這個(gè)程序能夠捕捉到任何發(fā)送到這個(gè)端口的請(qǐng)求,并將請(qǐng)求輸送到應(yīng)用程序中。比如,HTTP協(xié)議協(xié)議使用端口80,F(xiàn)TP采用TCP的端口21。這里指定myapp 使用TCP的端口100015。獲取一個(gè)可用端口的方法是把上一行的端口號(hào)加1即可。

五、查詢目標(biāo)

SQL SERVER名: "HFWG2_SYB"

數(shù)據(jù)庫名:exsydb

表名和表結(jié)構(gòu):s12_a010007

字段名 數(shù)據(jù)類型 長度 字段意義
Ofcname char 10 局名
Date int 4 日期
Time smallint 2 時(shí)間
Name char 16 路由名稱
Ncit Int 4 電路數(shù)
Ncct float 8 可用電路數(shù)
Pegs int 4 呼叫次數(shù)
Seiz Int 4 占用次數(shù)
Succ int 4 成功次數(shù)
Answ Int 4 應(yīng)答次數(shù)
Serl float 8 占用話務(wù)量
Rerl float 8 通話話務(wù)量
Retries int 4 中繼重選次數(shù)
no_answ int 4 久叫不應(yīng)次數(shù)
cong_dist int 4 對(duì)端擁塞次數(shù)
ls_busy int 4 對(duì)端市話忙次數(shù)
ts_busy int 4 對(duì)端長話忙次數(shù)


要求在瀏覽器中輸入日期和時(shí)間,對(duì)表s12_a010007查詢,并在網(wǎng)頁中反映出結(jié)果。

六、創(chuàng)建Powerbuilder應(yīng)用程序

1、 新建一個(gè)應(yīng)用(myapp)。

2、 新建一個(gè)窗口(w_1),定義一個(gè)instance 變量(i_server_transport)。

3、 單擊應(yīng)用畫板中的script按鈕,為myapp應(yīng)用的open事件編寫代碼如下:

open(w_1)

4、 打開窗口w_1,為它的open事件編寫代碼如下

int li_ListenReturnCode
/*創(chuàng)建傳輸對(duì)象,并設(shè)置其屬性*/
i_server_transport = CREATE transport
i_server_transport.driver="winsock" //采用TCP/IP協(xié)議
i_server_transport.application="myapp" //應(yīng)用名稱
i_server_transport.location="HFSA" //本地連接
/*監(jiān)聽客戶,并返回狀態(tài)值*/
li_ListenReturnCode= i_server_transport.Listen()
if(li_ListenReturnCode< >0) then
MessageBox("服務(wù)器監(jiān)聽出錯(cuò)"&
"服務(wù)器不能正常進(jìn)行監(jiān)聽:~r~n~r~n"+&
"請(qǐng)確保當(dāng)前TCP/IP服務(wù)不能被其它埠占據(jù),以及"+&
"myapp 10015/tcp",stopsign!)
Halt
Endif

5、 為w_1的close事件編寫代碼如下:

i_server_transport.stopListening() //停止在埠的監(jiān)聽
DESTORY i_server_transport //從內(nèi)存中清除傳輸對(duì)象
close(parent)

6、 創(chuàng)建一個(gè)datawindow(d_zy),查詢條件為日期、時(shí)間。這是POWERBUILDER的特色之一,這里就不作詳細(xì)解釋。

7、 定義一個(gè)用戶對(duì)象u_web_ct1,并定義一個(gè)UserObject Function f_get_2a01(integer date,integer time) return string

其代碼如下:

datastore ds_tf
string ls_html
int li_rowcount
//連接數(shù)據(jù)庫
sqlca.DBMS="SYC Sybase System 10 CTLIB"
sqlca.Database="exsydb"
sqlca.UserId="sa"
sqlca.Dbpass=""
sqlca.LogPass=""
sqlca.ServerName="HFWG2_SYB"
sqlca.LogId="sa"
sqlca.DbParm=""


connect using sqlca;

if sqlca.sqlcode < > 0 then
Messagebox(" ","connect error")
end if

ds_tf = create datastore

ds_tf.dataobject="d_a01"
ds_tf.SetTransObject(sqlca)
li_rowcount=ds_tf.Retrieve(date,time)

if li_rowcount=0 then
disconnect using sqlca;
return "no record!"
elseif li_rowcount< 0 then
disconnect using sqlca;
Return "retrieve failure!"
end if


ls_html = ds_tf.Object.DataWindow.data.HTMLTable


destroy ds_tf
disconnect using sqlca;

return ls_html


七、 使用

1、在主頁中添加如下代碼:

< form name="form1" method="post"
action="http://134.65.5.212/scripts/
pbcgi60.exe/internet/u_web_ct1/f_get_2a01?" >

< font size="-3" >< b >< p >日期: < input type="text" name=
"date" size="20" > < /b >< /font >< /p >
< p >< b >< font size="-7" >時(shí)間: < /font >< font size="-3" >
< input type="text" name="time" size="20" > < /font >< /b >< /p >
< p >< input type="submit" name="Submit" value="Submit" > < /p >
< /form >

2、運(yùn)行myapp應(yīng)用,啟動(dòng)瀏覽器,輸入日期和時(shí)間,結(jié)果如下:



八、小結(jié)

由于POWERBUILDER是專業(yè)級(jí)的數(shù)據(jù)庫開發(fā)工具,可以不受數(shù)據(jù)庫的種類和平臺(tái)的限制,采用它的WEB.PB技術(shù)來進(jìn)行Internet/Intranet開發(fā),能夠?qū)㈤_發(fā)者的精力都集中到業(yè)務(wù)邏輯的實(shí)現(xiàn)上,而不是花費(fèi)大量的時(shí)間去考慮和數(shù)據(jù)庫連接的問題。這種基于瀏覽器/服務(wù)器結(jié)構(gòu)的應(yīng)用優(yōu)勢在于系統(tǒng)的維護(hù)簡單,幾乎所有的工作都集中在WEB服務(wù)器上,大大減少了對(duì)多個(gè)客戶端的維護(hù)工作。另外,由于能夠?qū)⑦\(yùn)算任務(wù)合理地分布在瀏覽器和服務(wù)器之間,整個(gè)系統(tǒng)運(yùn)行的費(fèi)用也將大大降低。