新闻 重要资讯 专题 专家专栏 理论研究 分析报告 行业观察 学术会议 建设快车道 远程教育 基础网络 数字化校园 锐捷专栏
您所在的位置:EDU首页  >  教育信息化(旧)  >  征文活动
一种基于ASP的多表查询集中处理方法的实现
http://www.edu.cn   2006-02-13 作者:
字体选择  【】 【】 【

  摘要  本文讨论了使用ASP技术,实现多表查询集中处理的一种方法。

  关键字 ASP;多表查询;

  ASP (Active Server Pages)是一种被广泛用于创建动态网页的功能强大的服务器端脚本语言。ASP中提供了ADO对象来操作数据库,从而产生和运行动态的、交互的Web服务应用程序。在网站开发过程中,我们经常会用到许许多多的表,有时在一个页面上要实现多个表的查询。如果我们要操作的是20个表,那么我们不得不要为每一个表编写一段查询程序、建一个记录集,工作量实在是太大了。而且如果记录集和数据库连接没能及时释放的话, 将会引起严重的资源消耗,系统性能很难保证。下面就笔者开发 远程教学网站过程中的一个实例,来介绍一种方便的处理方法。

  1问题引入

  该教学网站的后台管理模块要实现多个表的信息查询、添加、更新和删除操作,有学生信息表、账户信息表、报名表、课程信息表、教师信息表、教师任课信息表、资金表、资金日志表等等近20个表,管理员在网站维护中要经常浏览、编辑这些表的信息。表结构中的字段名称一般采用英文名称,但显示在网页上,为了增加可读性,我们采用中文的名称,这样不得不为每一个字段在网页上设置一个中文名称与英文名称对应起来。另外,大家都知道,表的结构在一个系统运行过程中难免要进行修改,如删除一个字段或增加一个字段或字段的名称、含义发生改变,那么我们的程序必须也要做出相应的修改,这无疑是一件很头疼的事情。

  账户信息表的维护界面如图1所示:

 表:--账户信息表                 维护:  删除 编辑 增加

 

 

账号

开户时间

注销时间

密码

是否可用

班号

资金余额

是否注册

用户姓名

用户类别

 

 

 

 

 

 

 

 

 

 

2具体解决方法

处理以上问题,我是这样做的:

1)首先为每一个表xxx创建一个结构说明表xxx_stru,且每一个结构说明表的结构都一致,都只包含no(编号)、en(英文字段名)、cn(中文含义)、info(备注说明)四个字段。

如有一个账户信息表account.dbf

create table account(                    

 account_no                                       char(10),

 start_time                    date,

 cancel_time                    date,

 password                   char(10),

 is_used                    char(1),

 class_no                      char(6),

 user_type                  char(1),

 suplus                      number(7,2),

 is_enrolled                  char(1),

 name                       char(16));

account创建一个结构说明表account_stru.dbf

create table account_str(

no   number(2),

en   varchar2(20),

cn   varchar2(20),

info  varchar2(100));

2在结构说明表xxx_stru中填入xxx表中各个字段的编号、英文名称、中文含义、注释。

接上例:即向account_stru.dbf表中插入数据

insert into  account_stru(no,en,cn) values(1,'account_no','帐号');

insert into  account_stru(no,en,cn) values(2,'start_time','开户时间');

insert into  account_stru(no,en,cn) values(3,'cancel_time','注销时间');

insert into  account_stru(no,en,cn) values(4,'password','密码');

insert into  account_stru(no,en,cn,info) values(5,'is_used','是否可用','当出现异常如少钱时禁止');

insert into  account_stru(no,en,cn) values(6,'class_no','班号');

insert into  account_stru(no,en,cn) values(7,'SUPLUS','资金余额');

insert into  account_stru(no,en,cn) values(8,'IS_ENROLLED','是否注册');

insert into  account_stru(no,en,cn) values(9,'NAME','用户姓名');

insert into  account_stru(no,en,cn,info) values(10,'user_type','用户类别','t:教师;p:培训学员;z:自考;h:函授;o:管理员');

3)将每一个表链接到同一个list.asp列表数据文件,该文件将集中处理每一个表的查询。如:

 <a href="list.asp?name=账户信息&tablename=account">账户信息表</a>

<a href="list.asp?name=学生信息&tablename=student">学生信息表</a>

说明:点击每一个链接,则显示一个表的数据。这里通过Get方式传递了nametablename两个变量,其中name变量是为了显示表的中文标题,tablename变量是为了将表的名称传递给list.asp程序的ADO数据库连接语句。

4list.asp程序的实现(部分程序)

<%

dim  fldnamearry,i,table,tname,stru,m,dd,fldval

set cn=server.createobject("adodb.connection")

 cnstr=application("oconn")

 cn.open cnstr

‘读出传递过来的数据:

 table=request.querystring(tablename)

 tname==request.querystring(name)

‘进行字符串组合,形成结构说明表的名称:

 stru=table&"_stru"

‘建立结构说明表记录集

sqlstru="select * from "&stru

  set rsstru = Server.CreateObject("ADODB.Recordset")

  rsstru.open sqlstru,cn,3,1

  '将字段名放入二维数组fldarry中

  fldnamearry=rsstru.getrows

  rsstru.close

  set rsstru=nothing

set rs = Server.CreateObject("ADODB.Recordset")

  rs.cursorlocation=3

‘读出数据表中的数据

sql="select * from "&table

rs.open sql,cn,3,1

‘在页面上显示数据表的结构和数据

  response.write "<table border=1 width=100% align=center cellpadding=0 "_

                   &"cellspacing=0 bordercolor=#006600 bordercolordark=#E8F5F7"_

                   &" bgcolor=#E8F5F7>"

‘显示表的结构,字段名称用结构说明表中的cn代替:

  response.write "<tr align=center>"

  for each objfield in rs.fields

      for i=0 to ubound(fldnamearry,2)

        fldname=trim(ucase(fldnamearry(1,i)))

        if objfield.name=fldname then

           response.write "<td bgcolor=#dddddd >"&fldnamearry(2,i)&"</td>"

        end if

      next

    next

‘显示表中的数据:

   do while not rs.eof

     response.write "<tr align=center>"

    for each objfield in rs.fields

    if isnull(objfield.value) then

     response.write "<td><font color=red>未填</font></td>"

    else

     response.write "<td><font color=blue>"_

                            &objfield.value&"</font></a></td>"

         end if

     next

   response.write "</tr>"

   rs.movenext

 loop

 response.write "</table>"

 end if

%>

3结论

以上处理方法,减少了应用程序的数量,进而减少了程序出错的机率及程序维护工作量。而且结构说明表也帮助网站管理员更好的理解各个表的结构定义,利于网站远程教学系统的不断完善和后续开发工作的开展。

参考文献:

 [1] ASP动态网页设计》赵增敏编著 电子工业出版社(2003

[2] ASP数据库系统开发实例导航》宣小平等编著 人民邮电出版社(2003

页面功能 【打印】 【关闭】 【我有话说
延伸阅读
这个不显示的层是用来处理IE粑粑情况的,如果没有这个层IE里就会多出来一行字

 要 闻

热点新闻
建设快车道
中国教育和科研计算机网版权与免责声明

 

①凡本网未注明稿件来源的所有文字、图片和音视频稿件,版权均属本网所有,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发表。已经本网协议授权的媒体、网站,在下载使用时必须注明"稿件来源:中国教育和科研计算机网",违者本网将依法追究责任。

 

②本网注明稿件来源为其他媒体的文/图等稿件均为转载稿,本网转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。

版权所有:中国教育和科研计算机网网络中心 Copyright©1994-2008 CERNIC,CERNET 京ICP备020072

关于假冒中国教育网的声明 | 有任何问题与建议请联络:Webmaster@staff.cernet.com