在ASP连接ACCESS经常会遇到这样的问题,一级目录外的某个文件想引用数据库
连接文件(inc/conn.asp),而二级目录下某个文件也想引用这个文件,但就是
引用不成功,在conn.asp中使用Server.Mappath来取得数据库文件的绝对路径
如下代码:(服务器路径为D:/tmp)
inc/conn.asp
dbpath="db/db.mdb" '实际路径为D:/tmp/db/db.mdb
constr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath(dbpath)
直接访问inc/conn.asp,Server.Mappath为D:/tmp/inc,Server.Mappath(dbpath)为D:/tmp/inc/db/db.mdb,
与实际路径不符a
假设根目录下有一1.asp,则当1.asp包含inc/conn.asp时,Server.Mappath为当前路径
即(D:/tmp),则Server.Mappath(dbpath)为D:/tmp/db/db.mdb,与实际路径相同
若dbpath="../db/db.mdb"时,直接访问,得到路径为D:/tmp/db/db.mdb,1.asp访问,得到路径D:/db/db.mdb
这是什么原因呢?这是因为Server.Mappath返回的是当前路径,尽管1.asp包含inc/conn.asp,但ASP的运行机制是:
遇到include时,将被include的文件(即conn.asp)的代码复制到1.asp里,再执行,即Server.Mappath返回的是1.asp
的路径而不是inc/conn.asp的路径
如何两全呢?有人说,对不同情况写不同conn.asp,这也太那个了吧?
我写一个函数
function getdbpath(path)
a=Request.ServerVariables("URL")
b=split(a,"/")
if Ubound(b) > 2 then
getdbpath="../" & path
else
getdbpath=path
end if
end function
将dbpath传入getdbpath后再Server.Mappath
对dbpath的要求是不以"/"开头,以inc的上级目录下为基准