ASP访问多个Access数据库的简单方法
2018-12-18白健
白健
摘要:指出基于ASP+Access架构的网站项目中,采用多数据库设计,能有效弥补Access数据库的一些局限性。给出了在同一ASP页面中访问多个Access数据库的三种简单方法: 利用ASP+Cookie技术访问不同数据库;利用FOR循环结构+Cookie技术同时访问多个数据库;利用FOR循环结构+FSO组件同时访问多个数据库。给出了以上方法的ASP代码。
关键词:ASP;Access;多数据库;網站建设
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)27-0012-02
Several Simple Methods for ASP to Access Multiple Access Databases
BAI Jian
(Department of Basic Courses, Hebei Construction Material Vocational & Technical College, Qinhuangdao 066004, China)
Abstract: The paper points out that the use of multi-database design in website projects Based on ASP+Access architecture can effectively make up for some limitations of Access databases. Three simple methods to access multi-databases in same ASP pages are presented: Using the FOR-loop-structure and Cookie technology to access multi-database at the same time; Using the FOR- loop-structure and FSO component to access multi-database at the same time. The ASP code of the above methods is given.
Key words: ASP; Access databases; Multi-database; Website construction
1 概述
随着互联网+战略的实施,越来越多的教师根据自己的工作实际,尝试建立具有独立知识产权的教学资源网站。由于ASP技术成熟,简单易学;Microsoft Office是教师常用的办公系统,其集成的Access数据库简单好用;基于ASP+Access架构的网站架设简单,空间服务商广泛支持,适合非专业人员架设动态网站。因此,许多教师采用ASP+Access架构构建自己的教学资源网站。
但Access本身具有一定的局限性(见Microsoft Access软件中的帮助信息),如:库文件不能太大;最多只支持255个并发用户,实际运行中支持的更少;单表记录数不能太多,否则运行明显变慢。为克服以上不足,采用ASP+Access架构开发项目时,把以往只使用一个核心数据库的设计,改成使用多个同构数据库设计,这些同构数据库由系统根据后台设置的数据类别动态生成。实践证明,这一方法有效弥补了Access数据库容量小、并发访问用户少等不足,并且增加了网站使用的智能性和广泛性。
2 多数据库的建立
项目网站中共设计两类数据库:一类是基本信息数据库,只有一个,用于存储数据类别、对应的核心数据库编号、用户登录信息等基本信息,由后台管理员管理;一类是核心数据库,由多个数据库组成,用于存储网站提供的各种资源信息、网站用户输入的数据等,不同类别的数据单独建库,以编号区分,即本文所指的多数据库。
在建立网站的核心数据库时,首先根据实际需要建立模板数据库,命名为Datamodel.mdb。运行时,系统根据管理员设置的不同数据类别,利用模板数据库动态生成编号不同的系列同构数据库,可分别命名为data11.mdb、data12.mdb、…,data21.mdb、data22.mdb、…,data31.mdb、data32.mdb、…,等等,数据库名称中的数字为基本信息库中的数据类别编号,取1~99范围内的半角英文数字。
这样,就需要解决两个问题:一是用户在操作不同的数据类别时,需要访问不同的数据库;二是在数据统计时需要同时查询多个数据库。采用以下方法,较好地解决了以上问题,简单易行,不需要太深的专业知识,特别适合非专业人员采用。
3 多数据库的访问方法
3.1 利用ASP+Cookie技术动态访问不同数据库
用户访问网站时,根据用户选择的数据类别不同,系统将对应的数据库编号写入Cookie(Reponse.cookies("userinfo")("chnum")=编号变量)。在数据库连接文件中读出Cookie中的编号,赋值给数据库编号变量,根据编号变量建立相应数据库的连接。这样就实现了根据用户选择动态建立不同数据库的连接。
连接文件conn.asp代码如下:
<% dim chnum
chnum=Request.cookies("userinfo")("chnum")
db="data/data"&chnum;&".mdb"‘数据库存储路径为data/
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};pwd=;
dbq=" &Server.MapPath;(db)
%>
在访问数据库页面建立查询代码如下(以访问数据库中的表result为例):
<!—#include file="inc/conn.asp"—>
…
<%
sql="select * from result order by snoasc"
setrs=server.createobject("adodb.recordset")
rs.open sql,conn,1,1
if not rs.eof then
toptotal=rs("toptotal")
…
end if
rs.close
setrs=nothing
%>
…
通过这种方法,实现了动态访问不同数据库的目的。
3.2 利用FOR循环结构+Cookie技术同时访问多个数据库
网站在统计数据时,要根据统计需要访问多个乃至所有核心数据库(data11.mdb、data12.mdb、…,data21.mdb、data22.mdb、…,data31.mdb、data32.mdb、…)。后台管理员和用户可能并不知道究竟有多少个数据库,也不知道数据库文件名。可利用ASP的FOR循环结构和浏览器的Cookie技术实现多个数据库的同时查询。
通过浏览器打开统计页面,首先将基本信息数据库中的所有数据类别对应的数据库编号分别写入Cookie。在数据库连接文件中读出Cookie中的编号值,赋值给数据库编号变量,根据编号变量建立相应数据库的连接。这样就实现了动态建立多个数据库的连接。
连接文件connmulti. asp代码如下:
<%dim j,dbnum(99),connstr(99),conndb(99)
for j=1 to 99‘j的范围可根据实际情况指定
coochnum=Request.dookies("userinfo")("chnum"&j;)‘从Cookie中读出数据库编号
if coochnum<>"" then ‘非空的为有效编号,数据库存在,建立连接
dbnum(j)="data/data"&coochnum;&".mdb"
connstr(j) = "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database;
password=;Data Source=" &Server.MapPath;(dbnum(j))
setconndb(j)=server.createobject("ADODB.CONNECTION")
conndb(j).open connstr(j)
end if
next
%>
在访问数据库页面包含连接文件connmulti. asp,建立查詢代码如下(以访问数据库中的表result为例):
<!—#include file="inc/connmulti.asp"—>
…
<%
score=0
for chnum1=1 to 99
if conndb(chnum1)<>"" then‘判断是否建立了连接,对应连接文件中的conndb(j)。
sql="select * from result where sno='"&sno;&"' "
setrs=server.createobject("adodb.recordset")
rs.opensql,conndb(chnum1),1,1
if not rs.eof then
score=score +rs("toptotal")
…
end if
rs.close
setrs=nothing
end if
next
…%>
…
通过这种方法,实现了在一个ASP页面访问多个数据库的目的。
3.3 利用FOR循环结构+FSO组件同时访问多个数据库
如果觉得使用Cookie技术比较麻烦,在建立多数据库的连接时,可用FSO组件判断数据库是否存在,但需要远程服务器支持FSO组件。
连接文件connmulti.asp代码如下:
<% dimj,dbnum(99),connstr(99),conndb(99)
Set Fso=Server.CreateObject("Scripting.FileSystemObject")
for j=1 to 99
If Fso.FileExists(Serer.mappath("data/data"&j;&".mdb") then
dbnum(j)="data/data"& j &".mdb"
connstr(j) = "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database password=;Data Source=" &Server.MapPath;(dbnum(j))
setconndb(j)=server.createobject("ADODB.CONNECTION")
conndb(j).open connstr(j)
end If
next
Set oFile=Nothing
Set oFso=Nothing
%>
在查询页面建立查询代码同3.2中的相应代码,此处略。
这种方法要在所有数据库都有效的情况下使用。如果路
径中存在废弃的数据库,可能导致错误的结果。在这里仍可结合Cookie技术,以避免出错。
4 结束语
以上方法均在实际项目中验证通过,达到预期效果。实际项目中,可根据需要调整FOR循环变量的范围,一般设置为1~99,就可满足各学科教学资源网站的需要。当数据库数量较多时,查询的速度会有一定下降。但现在的计算机运行速度都很快,而且同时访问多数据库的页面很少,因此,这样的设计不会对网站的运行速度有太大的影响。如果同时查询的数据库个数很少,且数据库名称确定,则没必要用以上方法,直接建立数据库连接即可。
参考文献:
[1] 刘瑞新.ASP网页数据库短训教程[M].北京:机械工业出版社,2004年:205-237.
[2] 杨英洁.简析ASP的数据库连接[J].电脑知识与技术,2009(5):1031,1043.
[通联编辑:王力]