[返回]
计算机世界2000年第40期

用PB开发数据库的Web查询

合肥市电信局网管中心 曹 洁

  合肥市电信局网管中心目前运行的电话网网管系统有本地网集中监控和维护系统以及长途网管系统,其中本地网网管系统采用安徽省自行开发的一套系统,服务器为ALPHA 4000 小型机,操作系统为Digital Unix64,长途网管采用邮电部电信总局统一开发的ROMA系统,操作系统为SCO Unix,数据库均为Sybase SQL Server。我们另外采用了一台IBM Netfinity 3000作为Web服务器,采用Microsoft NT4.0为操作系统, IIS4.0提供WWW服务。在安装PB6.0时选择自定义安装,然后选择Internet Tools中的WEB.PB选项即可。

配置IIS服务器

  IIS的主目录下有一个子目录\scrips,这是IIS用来存放 CGI程序的目录。如果需要使用标准CGI程序,则将\PB6\IT\BIN\PBCGI60.EXE复制到这个目录下即可,如果使用ISAPI接口,则需要复制的文件是pbisa60.dll。

  但是为了保证服务能正常运行,还必须自行查看IIS服务的目录映像表,其步骤如下:

  1. 确定IIS已经安装且运行正常。

  2. 运行Internet Service Manager程序。

  3. 选择需要安装配置的Web服务(IIS支持多种服务,并能够对多台计算机的服务进行管理)。

  4. 从菜单条中选择属性菜单下的服务属性菜单项。

  5. 选择Directories页。

  6. 确定有一个别名为/scripts/的目录项(别名即虚拟目录名)。

  7. 选择/scripts/,并单击Properties按钮。

  8. 确定Execute是在Access组中唯一被选中的项目(在这个目录中不允许客户机执行读写操作)。

  9. 如果对属性作了修改,选择OK进行保存。

  10. 如果没有/scripts目录,可以添加一个。

编辑hosts 和 services 文件

  采用任何一个文本编辑器编辑这两个文件。通常hosts 文件在c:\winnt\system32\driver\etc目录下,添加下面一行:
  134.65.5.212 HFSA

  其中HFSA为主机名,134.65.5.212为IP地址。

  在c:\winnt\services文件中添加下面一行:
  myapp 100015/tcp

  这一行的意义在于将所创立的PB服务添加到Windows 的服务注册文件中。使用TCP/IP协议的应用程序都需要使用一个端口,服务应用程序将在这个端口布置一个监听程序,这个程序能够捕捉到任何发送到这个端口的请求,并将请求输送到应用程序中。比如,Http协议使用端口80,FTP采用TCP的端口21。这里指定myapp 使用TCP的端口100015。获取一个可用端口的方法是把上一行的端口号加1即可。

查询目标

    SQL SERVER名: “HFWG2_SYB"
    数据库名:exsydb
    表名和表结构:s12_a010007

  要求在浏览器中输入日期和时间,对表s12_a010007查询,并在网页中反映出结果。

创建Powerbuilder应用程序

  1. 新建一个应用(myapp)。

  2. 新建一个窗口(w_1),定义一个instance 变量(i_server_transport)。

  3. 单击应用画板中的script按钮,为myapp应用的open事件编写代码如下:open(w_1)

  4. 打开窗口w_1,为它的open事件编写代码如下:

int li_ListenReturnCode
/*创建传输对象,并设置其属性*/
i_server_transport = CREATE transport
i_server_transport.driver=“winsock" //采用TCP/IP协议
i_server_transport.application=“myapp" //应用名称
i_server_transport.location=“HFSA" //本地连接
/*监听客户,并返回状态值*/
li_ListenReturnCode= i_server_transport.Listen()
if(li_ListenReturnCode<>0) then
MessageBox(“服务器监听出错"&
“服务器不能正常进行监听:~r~n~r~n"+&
“请确保当前TCP/IP服务不能被其他埠占据,以及"+&
“myapp 10015/tcp",stopsign!)
Halt
Endif

  5.为w_1的close事件编写代码如下:

i_server_transport.stopListening()  //停止在埠的监听
DESTORY i_server_transport //从内存中清除传输对象
close(parent)

  6.创建一个datawindow(d_zy),查询条件为日期、时间。这是PB的特色之一,这里就不作详细解释。

  7.定义一个用户对象u_web_ct1,并定义一个UserObject Function。

f_get_2a01(integer date,integer time)  return string
    其代码如下:
datastore  ds_tf
string ls_html
int li_rowcount
//连接数据库
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" >时间:
 < /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.运行myapp应用。

  3.启动浏览器,输入日期和时间,结果如下。

小 结

  由于PB是专业级的数据库开发工具,可以不受数据库的种类和平台的限制,采用它的 WEB.PB技术来进行Internet/Intranet开发,能够将开发者的精力都集中到业务逻辑的实现上,而不是花费大量的时间去考虑和数据库连接的问题。这种基于浏览器/服务器结构的应用优势在于系统的维护简单,几乎所有的工作都集中在Web服务器上,大大减少了对多个客户端的维护工作。另外,由于能够将运算任务合理地分布在浏览器和服务器之间,整个系统运行的费用也降低了。 

  作者邮箱:caojie0786@sina.com