|
学校教学系统网络化已成趋势,教学网站的后台管理模块要实现多个表的操作,其程序之繁琐令多数网管员为之却步。
学校网站的后台管理模块有学生信息表、账户信息表、报名表、课程信息表、教师信息表、教师任课信息表、资金表、资金日志表等等近20个表,管理员在网站维护中要经常浏览、编辑这些表的信息。表结构中的字段名称一般采用英文名称,但显示在网页上,为了增加可读性,我们采用中文的名称,这样不得不为每一个字段在网页上设置一个中文名称与英文名称对应起来。大家都知道,表的结构在一个系统运行过程中难免要进行修改,如增删一个字段或字段的名称、含义发生改变,那么我们的程序必须也要做出相应的修改,这无疑是一件很头疼的事情。
处理以上问题,以下是一个解决办法:
首先,为每一个表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 cha(16));
为account创建一个结构说明表account_stru.dbf:
create table account_str(
no number(2),
en varchar2(20),
cn varchar2(20),
info varchar2(100));
第二,在结构说明表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:管理员');
第三,将每一个表链接到同一个list.asp列表数据文件,该文件将集中处理每一个表的查询。如:
<a href="list.asp?name=账户信息&tablename=account">账户信息表</a>
<a href="list.asp?name=学生信息&tablename=student">学生信息表</a>
点击每一个链接,则显示一个表的数据。这里通过Get方式传递了name和tablename两个变量,其中name变量是为了显示表的中文标题,tablename变量是为了将表的名称传递给list.asp程序的ADO数据库连接语句。
第四,list.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
…
%>
以上处理方法,减少了应用程序的数量,进而减少了程序出错的机率及程序维护工作量。而且结构说明表也帮助网站管理员更好地理解各个表的结构定义,利于网站远程教学系统的不断完善和后续开发工作的开展。 《中国教育网络》06年1-2月刊
|