返回此文发表于计算机时代1998年第12期

利用WEB技术改造传统MIS系统的查询界面

杭州西泠集团公司计算机科 吴建苗

  我们知道,传统的MIS系统一般是由关系型数据库和相应的应用程序组成,由于我们的计算机应用水平相对来说还比较落后,有相当数量的企事业单位的MIS系统是由分散的相对较小的应用系统组成,对每个业务部门所使用的应用系统来说,系统功能和人机界面都能满足要求,但对企事业单位的决策者和管理者来说,由于每个应用系统有不同的人机界面,使得他们在使用MIS系统时有很多不便之处。现在,由于Internet技术的成熟,可以利用WEB技术来解决这个问题。大家知道,在Internet中,有成千上万个应用系统,而人机界面只有一种,即浏览器方式。因此,我们可以采用浏览器,把MIS系统中不同的查询界面统一起来。在本文中采用微软的IIS技术来实现。

一、创建WEB服务器

  要利用WEB技术,必须构建一个WEB服务器,在这里,我们采用Windows NT Server 4.0和IIS2.0(Internet Information Server)作WEB Server,它的价格较便宜,同时对硬件要求也不高(采用一般的PII,64MB内存的PC即可)。如果原来已有NT Server,则只要安装IIS2.0即可,若没有该系统,新建也很经济。
  IIS安装完后,要对有关的应用创建一个WEB服务的虚拟路径。缺省情况下用户的应用是存放在WEB Server上别名是/Scripts的虚拟目录下,而在实际应用中为了便于管理,需要创建一个新的虚拟目录。其建立步骤如下:(必须要有系统管理员的权限)
  1、 硬盘的根目录下创建一目录,如为C:\WORK。
  2、 在“开始”处选择“程序”栏,在“程序”栏中选择“Microsoft Internet Server(公用)”下的“Internet服务器管理”。
  3、 在“Internet服务器管理”页面中双击“WWW”。
  4、 在“WWW服务属性”中选择“目录”页面,把建立的“C:\WORK”添加到目录中,同时把它设置为主目录。

二、建立ODBC

  一般的关系型数据库绝大多数都提供ODBC的驱动程序,象一般的小型数据库如Foxpro,Access等和大型数据库如Orcal,SQL Server 等。ODBC的建立步骤如下:
  1、进入WEB服务器的控制面板,双击ODBC图标,在ODBC对话框中,底部有两个按钮,分别是“Options”和“System DSN”,一定要选择“System DSN”按钮,添加SQL Server驱动程序。
  2、 在"Data Source Name"文本框中,键入数据源名称以及有关的其它内容。

三、用WEB技术访问关系型数据库原理

  利用WEB页面来访问关系型数据库主要是通过Internet Database Connector(IDC)来实现的。IDC允许在前端HTML页面和后端ODBC数据源之间进行通信,IDC采用HTTP协议接收输入并通过返回用于显示的完整HTML WEB页面来响应请求。举例来说,当利用IDC生成一个从HTML页面到IIS的数据库查询时,IIS将请求传到一个称为httpodbc.dll的动态连接库中,它就是IDC。嵌于httpodbc.dll中的调用适当的ODBC驱动程序来访问数据库。ODBC驱动程序执行SQL语句,从数据库中检索记录,当检索记录时,httpodbc.dll将生成的记录集格式化并作为要显示的HTML页面返回到浏览器中。
  IDC的执行需要三个不同的ASCII文本文件。这三个文件控制由IDC处理的数据库信息流及内容。这三个文件分别是:HTML(htm)文件,Internet Database Connector(idc)文件和HTML扩展(htx)文件。

四、实现方法

  从上面的原理可以看到,利用WEB技术访问关系型数据库必须要有三个文件,在这三个文件中,htm文件用来输入需要检索的条件;htx文件主要用来实现显示格式;idc文件用来实现从数据库中检索数据。因此,idc文件是整个技术的核心,它由三部分组成,分别是Datasource(数据源),Template(htx文件)和SQLStatement(SQL语句) 。在这三部分中SQL语句是关键,SQL语句怎么写很有讲究。我们知道,在一般的MIS系统中,数据的查询是通过多个表关联,过滤,组合而成的,往往用一个SQL语句无法实现。因此必须要利用数据库提供的临时表来实现,在idc文件中,可以使用多个SQL语句,这为我们只使用SQL语句实现数据检索创造条件。另外在SELECT语句中,显示栏目都要转变成字符串。
  在具体的实现过程中,可以分两方面内容实施:
  1、 编写htx文件,把有关查询显示的格式分类,因为有很多的查询显示格式基本相同,因此分类后可以减少工作量。另外,对一些复杂的格式,可以先在WORD97中编辑成相应的格式,然后按HTML格式保存或者再作适当的修改即可。
  2、 编写idc文件,在idc文件中核心是SELECT语句,在SELECT语句中,由于有的htx文件要通用,因此字段名称要取别名,与对应的htx中的名称一致。另外,要充分利用SQL语言的灵活性,可以采用多个SQL语句来实现所需的结果。在下面的实例中,用了4个SQL语句实现,当然也可以简化。

五、实例

  以下用具体的实例说明(显示数据均为虚构)。
  有两个表:分别是产品表和产品销售表。数据库采用MS SQL SERVER6.0 。
  产品表(CPB):产品代码(CPDM)和产品名称(CPMC)。
  产品销售表(XSB):产品代码(CPDM)、销售日期(XSRQ)、销售数量(XSSL)和销售金额(XSJE)。

**********IDC文件**********

DATASOURCE: SALE_ODBC 数据源名(ODBC名)

USERNAME: USER 用户名

PASSWORD: password 口令

TEMPLATE: c:\work\xsrb.htx

RequiredParameters: SDATE,EDATA 传递的参数值(日期)

SQLstatement: SELECT cpdm,xssl,xsje into #aa FROM xsb where

+xsrq>=convert(datetime,'%SDATE%') AND xsrq<=convert(datetime,'%EDATE%')

+order by cpdm

SQLstatement: SELECT cpmc,sum(xssl) as xssl,sum(XSJE) AS XSJE into #bb

+FROM #AA,CPB where cpb.cpdm=#aa.cpdm group by cpmc

SQLstatement: insert into #bb select '合计' as CPMC,sum(XSSL),SUM(XSJE) from #aa

SQLstatement:SELECT cpmc AS mc,CONVERT(char,XSSL) AS SL,CINVERT(char,XSJE) +AS JE FROM #bb

  上述第一个SQL语句中,从XSB中取数据保存到临时表#AA中;第二个SQL语句把产品代码转变为名称,然后把同一产品数据合并后存放到临时表#BB中;第三个SQL语句求出所有产品的合计数;最后一个按照HTX文件所需的格式显示,但每个字段必须要转变为字符。上述的参数SDATE和EDATE是从HTML文件中传递过来的。

**********HTX文件**********

<HTML>

<HEAD><TITLE>产品销售数据</TITLE></HEAD>

<BODY>

<font size=2>

<center>

<p>

<table border>

<%begindetail%>

<%if currentRecord EQ 0 %>

<caption><b><%idc.SDATE%>到<%idc.EDATE%>产品销售情况一览表</b></caption>

<p>

<tr>

<th><b>产品名称</b></th><th><b>销售数量</b></th><th><b>销售金额</b></th>

</tr>

<%endif%>

<tr>

<td><%MC%></td><td><%SL %></td><td><%JE%></td>

</td>

<%enddetail%>

<p>

</table>

</center>

</body>

</html>

**********htm文件**********

<html>

<head><title>产品销售表</title></head>

<body>

<center>

<table>

<tr>

<td></td>

<td>

<hr>

<h1>产品销售表<h1>

<p>

<form action="/work/cxrb.idc" method=POST>

<h3>起始日期:</h3><font size=3>

<input type="text" name="SDATE" value="" size=10 maxlength=10>

<h3>结束日期:</h3><font size=3>

<input type="text" name="EDATE" value="" size=10 maxlength=10>

<p>

<input type="submit" value="确 定">

</form>

</center>

</font>

</td>

</tr>

</table>

</body>

</html>

our1-1.jpg (12229 字节)
          图1

our1-2.jpg (18657 字节)
          图2

  图1和图2分别为本例的输入屏幕和执行结果。

六、总结

  根据上面的分析和实例,对一些复杂的查询格式,用WEB技术来实现它,也是不难的。只要我们熟悉SQL语言,把传统的查询界面移植到浏览器界面是完全可以实现的。以上介绍的只是用Internet Database Connector(IDC)来实现的一种方法,也可以采用其它方法来实现相同的效果。

参考文献:

  1、(美)Scot Hillier著 张威 王彬星译《Visual Basic 脚本编写指南》机械工业出版社
  2、(美)Jeff Bankston著 郭漫雪等译 《用Windows NT Server建立Web服务器》机械工业出版社