asp連access的解決辦法

在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的上級目錄下爲基準 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章