利用PB实现现有数据库的Web查询
汪太鹏
PB6.0以上的版本具有一项新功能,即Web.PB,它依附于分布式PowerBuilder功能并将其扩展到可用于Internet,我们利用它可以轻松实现数据库的Web查询。利用PB实现Web上的数据库查询,首先要生成分布式PB服务器应用程序,其次制作相应的
HTML页面,第三是完成服务器应用程序的安装和有关配置,最后在利用Web方式查询之前启动服务器应用程序即可。下面结合本人工作中的实例进行介绍。
开发分布式PB服务器应用程序
开发分布式PB应用程序有许多书籍可以查阅,最简单的服务器应用程序,只需要创建一个窗口、一个用户对象和所需的数据窗口等即可,以下给出窗口的部分代码。
在窗口内定义Instance变量:
Transport itrp_Transport
窗口的Open事件的脚本:
itrp_Transport = Create Transport
窗口的“Start Server”按钮的部分脚本:
itrp_Transport.Driver = "WinSock"
itrp_Transport.Application = "w_server"//w_server为本例中的服务器应用
itrp_Transport.Listen()
If itrp_Transport.ErrCode = 0 Then
mle_status.Text = "Server Running"
Else
mle_status.Text = String(itrp_Transport.ErrCode) + " - " +
itrp_Transport.ErrText
End If
This.Enabled = False
cb_stop.Enabled = True
窗口的“Stop Server”按钮的部分脚本:
itrp_Transport.StopListening()
If itrp_Transport.ErrCode = 0 Then
mle_status.Text = "Server Stoped"
Else
mle_status.Text = String(itrp_Transport.ErrCode) + " - " +
itrp_Transport.ErrText
End If
This.Enabled = False
cb_start.Enabled = True
窗口的Close事件的脚本:
itrp_Transport.StopListening()
Destroy itrp_Transport
在用户对象内需要建立有关的用户对象函数来实现连接数据库、断开连接、获取数据等功能。下面是获取数据函数的代码。
string ls_html,ls_dwfl,ls_title
datastore lds_a
long ll_row
lds_a = create datastore
lds_a.dataobject=as_dwobject
of_dbconnect(ito_ess95)
//连接到数据库的函数
ls_title=of_getname(as_xzqh)
lds_a.settransobject(ito_ess95)
of_changedw(lds_a,as_fl)
//修改数据窗口数据分类的函数
ll_row=lds_a.retrieve(al_year,as_xzqh,as_sxhl,ls_title)
lds_a.modify("datawindow.HTMLTable.GenerateCSS='yes'")
lds_a.modify("datawindow.HTMLTable.Nowrap='yes'")
lds_a.modify("datawindow.HTMLTable.border=2")
IF ll_row〉0 then
ls_html = "〈HTML〉〈HEAD〉〈TITLE〉河南省环境统计数据查询〈/TITLE〉〈/HEAD〉"
ls_html += "〈body〉"
ls_html += "〈P〉"
ls_html += lds_a.Object.DataWindow.HTMLTable.StyleSheet
ls_html += lds_a.Object.DataWindow.data.HTMLTable
ls_html += "〈P〉〈/BODY〉〈/HTML〉"
else
of_dbdisconnect(ito_ess95)
//断开数据库连接
end if
return ls_html;
对于连接数据库、断开数据库可以在服务器应用程序启动、关闭时执行,在服务器运行状态保持连接,这样可以提高Web检索速度。
制作相应的HTML页面
如果没有Web站点,需要先建立站点,然后制作我们所需的页面。所做页面为一般的HTML页面,其中用HTML
Form调用在服务器应用程序的用户对象中定义的函数,需要注意的是表单域名下拉选单的名称等参数名称应该与所用函数的参数名相同。数据查询的Web页面部分源代码如下:
〈html〉
……
〈p〉〈strong〉〈font color="#0000FF"〉环境统计数据与环境统计代码查询〈/font〉〈/strong〉〈/p〉
〈form method="POST"
action="http://www.ha.epnet/cgi-bin/pbcgi60.exe/w_server/n_cst_a/of_get_data"〉
〈p〉报表〈strong〉:〈/strong〉〈select name="as_dwobject"
size="1"〉
〈option selected value="ess_fs_hz"〉废水汇总(含非重点)〈/option〉
〈option value="ess_fq1_hz"〉废气汇总(SO2,烟尘,含非重点)〈/option〉
……
〈/select〉& 年度〈strong〉:〈/strong〉〈select
name="al_year" size="1"〉
〈option selected value="1998"〉1998〈/option〉
……
〈/select〉& 行政区〈strong〉:〈/strong〉〈select
name="as_xzqh" size="1"〉
〈option selected value="41%"〉河南省〈/option〉
〈option value="4101%"〉郑州市〈/option〉
〈option value="4102%"〉开封市〈/option〉
……
〈/select〉& 流域〈strong〉:〈/strong〉〈select
name="as_sxhl" size="1"〉
〈option selected value="%"〉全省各流域〈/option〉
〈option value="2%"〉海河流域〈/option〉
……
〈/select〉& & & 〈br〉
分类:〈select name="as_fl" size="1"〉
〈option selected value="地市"〉地市〈/option〉
〈option value="县区"〉县区〈/option〉
……
〈/select〉〈input type="submit" value="查询"〉〈/p〉
〈/form〉
〈/html〉
服务器应用程序的安装和配置
服务器应用程序可以安装在Web服务器上,也可以安装在局域网内其他的计算机或服务器上。
Web.PB调用的CGI程序应位于Web服务器的确定文件夹(调用时指定的文件夹)内,一般为相应站点的cgi-bin,如本例所用的pbcgi60.exe应确保在www.ha.epnet站点的cgi-bin文件夹内。
需要配置的有Web.PB初始化文件、Services文件和Hosts文件。Web.PB初始化文件的文件名随操作系统不同而不同,对UNIX系统为.pbweb.ini(隐藏文件),对Windows系统为pbweb.ini。如果在Web服务器上没有安装Web.PB,则应该把配置好的pbweb.ini文件复制到Windows的安装目录下。pbweb.ini文件内包含有Web.PB的系统设置、应用名和用户对象的缺省值、每个服务应用的设置信息,见如下程序。
[Web.PB]
ErrorMessage='〈br〉E-Mail:〈A HREF="mailto:ohtaiho@sina.com"〉请把问题告诉我〈/A〉'
ISAPIKeywords ="SERVER_SOFTWARE,…"//用于Microsoft IIS的CGI环境变量
CGIKeywords ="SERVER_SOFTWARE,…"//用于任何支持CGI的Web服务器的CGI环境变量
NSAPIKeywords="SERVER_SOFTWARE,…"//用于Netscape Commerce
Server的CGI环境变量
[Default]
serveralias=w_server
serverobject=n_cst_web
[w_server]
application=w_server
location=localhost
serverobject=n_cst_web
driver=winsock
启动Web服务器

图1
服务器应用启动后,查询页面如图1所示。