基于WEB的数据库查询
 

97年以来基于WEB的数据库应用在数据库界谈论的颇多,基于WEB的数据库的应用,是将数据库和WEB技术结合,按照BROWS/SERVER结构建立的通过浏览器访问数据库的服务系统。目前以WEB数据库为旗帜的产品、原形或设计方案及研究论文很多,开发数据库的WEB应用,建立能与数据库交互的WEB网页,大致有三中方法:其一是网关接口(CGI),其二是JDBC(JAVADATABASECONNECTIVITY),其三是各数据库厂家开发的各自的WEB中间间。

各数据库厂家开发的各自的WEB中间件虽好不能通用;JDBC可移植性、安全性与可靠性有显著优点,但对开发难度大,不能满足广大非专业人员的需要;CGI方式应用灵活,开发工具丰富,通用CGI程序也很多。本人通过在网上周游,寻得一WEB数据库CGI接口程序ODBIC(101K字节大小),小巧玲珑,应用灵活,可以和各种数据
库(包括FOXPRO系列、SQLSERVER、ORACLE等)建立连接。

ODBIC(OPENDATABASEINTERNECONNECTOR)程序是运行在WINDOWSNT和WIN95上的共享软件,可通过http://www.iodbc.com获得该软件(目前已有ODBIC1.5版,本文使用的是ODBIC1.4版)。ODBIC是在浏览器和数据库之间提供一个接口,即一个CGI程序,可以通过浏览器时时更新和浏览数据库。

通过ODBIC可以用标准的ANSISQL语句诸如:SELECT,INSERT,UPDATE,orDELETE对在ODBC中设置的所有数据库进行操作。ODBIC的最大优点是可以用摸板文件作为输入,摸板文件也能接收命令中通过submit发来的用户输入参数,摸板包含标准的HTML命令和文本,并且这些命令和文本ODBIC直接输出到浏览器上,当然摸板也包含ODBIC命令和变量。当ODBIC以摸板作为输入运行时,标准的HTML命令和文本直接输出到浏览器上,发现ODBIC命令时立即执行,发现ODBIC变量时立即用变量的当前值代替。ODBIC命令是放在标准的HTML语言的注释行里,ODBIC变量是用一对符号括着,下面一个很简单的例子说明ODBIC命令和变量是如何出现在摸板文件里的:

< !--DATABASE DSN=$my_database$ -- >t;

< !--SQL select * from my_table -- >;

< !--TABLE-- >;

DATABASE、SQL、TABLE 是ODBIC的最基本的命令。

本文通过一个实例介绍用ODBIC编写在中文WIN95下访问SQLSERVER数据库的应用程序,体会以下ODBIC功能的灵活、方便、易学的,推荐给大家共免。在下面的例子里,我们要用到一电信营业数据库的长途电话明细表,表结构如下(数据库名为TELEPHONE,所用表名为DETAIL):

主叫号码(CALLER) 被叫号码(CALLED) 起始时间(START-TIME) 通话时长(LENGTH)秒 通话话费(FEI)元

PQABCD1 0101234567 98/03 19/27 100 220

PQABCD2 0371123456 98/03 19/40 370 462

……

……

首先,建立ODBC数据库的连接,打开WIN95的“设置”菜单中的“控制面板”,启动ODBC驱动程序,设置相应的ODBC驱动器,本例中为SQLSERVER;建立数据源,为了方便此处数据源的名也为TELEPHONE。如果“控制面板”中没有ODBC驱动程序,可以从WIN95的系统盘中装入,也可从一些共享软件站点下载,具体办法此处不在赘述。

然后,编写长话明细查询主页,为了简化,清单中删去了一些修饰性的HTML语句,查询类型中也只保留了长话明细(可以包含电话挡案查询和更改、交费汇总和明细、帐务处理等等)。

长话明细查询主页清单:SEARCH.HTML

< HTML >

< HEAD >

< TITLE >长话明细查询主页< /TITLE >

< /HEAD >

< CENTER >

< TABLE >

< FONT SIZE="5" COLOR="#990000" >

长话明细查询< /FONT >

< FORM METHOD="post" ACTION="

../cgi-bin/odbic.exe/cgi-bin/MODEL.html" >

< TR >< TD ALIGN="right" >< FONT COLOR="#990000" >

电话号码 : < /FONT > < /TD >

< TD >< INPUT NAME="DHHM" TYPE="text" SIZE="12"
>

< /TD >< /TR >

< TR >< TD ALIGN="right" >< FONT COLOR="#990000" >

授权口令: < /FONT > < /TD >

< TD >< INPUT NAME="PWD" TYPE="password" SIZE="12"
>

< /TD >< /TR >

< TR >< TD ALIGN="right" >< FONT COLOR="#990000" >

查询类型: < /FONT > < /TD >

< TD >< SELECT NAME="CATE" >

< OPTION VALUE= >--请选择--

< OPTION VALUE="ch" >长话明细

< /TD >< /TR >

< /TABLE >

< INPUT TYPE="submit" VALUE="查询 " >

< INPUT TYPE="reset" VALUE="清除 " >< /FONT >

< /FORM >

< /CENTER >

< /BODY >

< /HTML >

接下来就是编写摸板文件,在编写之前,先介绍以下ODBIC的主要命令。ODBIC软件主要有以下命令:

DATABASE定义连接ODBC数据库的参数;
DEFAULT定义变量的默认初始值;
EACHROW,ENDROW格式化结构化查询后的每一行结果;
EXEC执行一个系统命令或运行一个DOS程序;
EXIT终止ODBIC对摸板文件的执行;
FORMAT定义变量的输出格式;
IF,ELSE,ENDIF变量条件判断语句;
IFNEW判断经过对某一字段排序的表是否该字段的值发生了变化;
INCLUDE读入另一摸板文件;
OPTIONLIST从查询结果产生一个HTML的“SELECTOPTION”命令;
OUTPUT把结果输出到磁盘文件;
SET对变量赋值;
SQL执行ODBCSQL语句;
TABLE自动格式化SELECT语句的结果到HTML格式。

从以上命令可以看出,ODBIC软件功能的强大,通过IF-ELSE-ENDIF和SET命令,可以编写实现很多功能,下面摸板的功能是从SEARCH.HTML主页中获取电话号码和授权口令,对所输号码的明细进行查询,查询结果以表格形式输出,并对话费进行合计。摸板文件清单见后(文件中“//”后面的是注释):摸板文件清单:MODEL.HTML

< HTML >

< HEAD >

< TITLE >ODBIC-TEST-MODEL< /TITLE >

< /HEAD >

< BODY BGCOLOR="#ff00ff" TEXT="#FFFF00"

LINK="#ff00ff" ACTIVE="#000000" VISITED="#000000" >

< center >

< table border=3 >

< !--if $CATE$=ch-- >

< P >查询号码:$dhhm$

< !--SET HJ=0.0 -- > //设置合计话费变量的初值;

< !--DATABASE DSN=telephone;UID=myloginame;PWD=$PWD$ -- >

//DSN、UID、PWD分别为联结数据库的数据库名、

用户登录名称、

//登录口令,这三项均可以变量的形式接收用户输入;

< !--SQL select called,start_time,length,feI from detail where

caller=$dhhm$ order by start_time -- >

< !--eachrow-- >

< tr >< td >$row$< /td >< td >$called$< /td >< td >

$start_time$< /td >< td >$length$< /td >

< td >$fei$< /td >< /tr > //变量row为ODBIC

本身提供内部变量,表示当前结果集的行//号,ODBIC对结果集的字段名自动默认为变量;

< !--set $HJ$=$HJ$+$FEI$-- >

< !--endrow-- >

< /table >

< !--ELSE -- >

< p >< front SIZE="6" COLOR="#990000" >

对不起你的口令错误!< /front >

< !--E-- >

< /center >

< /BODY >

< /HTML >

总上所述,我们SQLSERVER数据库进行了交互访问,同样也可对ORACLE、SYBASE、ACCESS、FOXPRO系列等数据库的访问,并且在同一个摸板文件可以同时打开上述数据库,并把它们关联起来进行事务处理。对于广大关心基于WEB的数据库应用的计算机爱好者来说,ODBIC的确简单、易学、功能强大,本文只是大致介绍了以下,希望我的文章能起到抛砖引玉的作用,欢迎朋友门交流、指导。

(责任编辑:铭铭)