ASP中access数据库的路径问题

作者:网络 来源:佚名 更新时间:2008-04-04 22:57:19 点击:
自己平时做的网站大多使用的是sql数据库,所以对使用access数据库的网站没有太多的接触。昨日在帮朋友做一个使用access数据库的网站后台管理程序时,遇到了一些麻烦。



该网站的目录设置如下(只列出了相关部分)


f1目录是后台管理程序所在,f2目录下的mydata.mdb是数据库文件,cnn.asp中写明了数据库的连接方式,在其他文件中以包含文件的方式来使用。



因为mydata.mdb和cnn.asp在同一目录下,因此cnn.asp中的连接语句是这么写的:

strcnn = "driver={microsoft access driver (*.mdb)};dbq=" & _

server.mappath("mydata.mdb")



由于是原来写好的,我没有仔细考虑什么,就直接在f1目录下的index.asp文件中加入f2语句

<!--#include file="../f2/cnn.asp" -->

然后运行……嗯???出错了!!

microsoft ole db provider for odbc drivers (0x80004005)
[microsoft][odbc microsoft access driver]常见错误 不能打开注册表关键字 'temporary (volatile) jet dsn for process 0x94 thread 0x9a0 dbc 0x13b0074 jet'。

错误提示是在open数据库时出错了,没有找到该数据库。难道是数据库路径不对?



将cnn.asp中的strcnn输出看看先

driver={microsoft access driver (*.mdb)};dbq=c:\f1\mydata.mdb

果然,路径错误!



看来,是这个server.mappath将包含cnn.asp文件的页面文件的所在路径做为了当前路径。即如果是f1目录下的index.asp包含了cnn.asp,则此时的server.mappath("mydata.mdb")就是c:\f1\mydata.mdb;如果f1目录下的news目录下某个文件包含了cnn.asp,则此时的server.mappath("mydata.mdb")就是c:\f1\news\mydata.mdb;

经过验证,证明情况确实如上。



问题发现了,就该解决了它。由于无法限定在几级目录中要包含cnn.asp文件,因此使用server.mappath就无法获取数据库正确的路径;难道要在所有使用数据库的文件中全部写入该数据库的连接?这是下下策,尽量避免。



经过n分钟的思考,终于想出了一个较为划算的方法,就是不使用虚拟路径,先确定根目录的实际路径,然后加入数据库的所在路径。实现代码如下:



cnn.asp文件:



dim strcurpath,strcurlocation



'获取包含该文件的页面文件的虚拟路径

strcurpath=request.servervariables("path_info")

'获取包含该文件的页面文件的实际路径

strcurlocation=request.servervariables("path_translated")



'转换路径间隔符号(虚拟路径用"/"分隔,实际路径用"\"分隔)

strcurpath=replace(strcurpath,"/","\")



'得到网站根目录的实际路径

strcurlocation=replace(strcurlocation,strcurpath,"")



'指定数据库实际路径

strcurlocation=strcurlocation & "\f2\mydata.mdb"



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

'连接到数据库服务器,数据库名称 mydata.mdb

strcnn = "driver={microsoft access driver (*.mdb)};dbq=" & strcurlocation

cnn.open strcnn



就这些了,扔砖头吧