Q:使用ASP程式語法連結資料庫(.mdb),常見錯誤訊息狀況說明?
A:當您使用ASP程式語法編輯網站資料庫連結時,執行上會發生一些錯誤訊息頁面顯示,一般常誤以為是主機發生異常或是主機沒有開放功能權限,其實大部分都是程式編寫上疏失或程式本身錯誤所造成。
以下提供一些編寫程式錯誤所造成的網頁常見錯誤訊息供您參考:

找不到檔案
Microsoft JET Database Engine 錯誤 '80004005'
'C:\Inetpub\wwwroot\test.mdb' 不是一個有效的路徑。請確定路徑名稱是拼對的,而且檔案位於您所連接的伺服器上。
正如同系統回應給您的訊息一般,伺服器在ASP程式所指定的路徑下面,找不到指定的檔案或資料庫。
倘若您是租用本網虛擬主機網站代管服務的用戶,請登入網站管理控制台中的檔案目錄管理選項裏,有詳載您的網站實際存放的目錄位置。


找不到檔案
Microsoft JET Database Engine (0x80004005) Could not find file
'C:\Inetpub\wwwroot\test.mdb'.
正如同系統回應給您的訊息一般,伺服器在ASP程式所指定的路徑下面,找不到指定的檔案或資料庫。


找不到包含檔
Active Server Pages 錯誤 'ASP 0126'
找不到包含檔
程式碼設計者,為了節省撰寫程式碼的時間,將呼叫資料庫的語法藉由副程式進行,但因為系統找不到副程式檔案或找不到其他指定要求載入的附加檔案,故出現這一個錯誤訊息。
比較常見的錯誤情況是,使用者搞不清楚網站根目錄和子目錄的互動關係,例如在子目錄下面執行程式,但副程式卻擺放在網站根目錄或其他子目錄下面,而程式碼卻沒有返回上一層或進入正確的子目錄尋找。
當然,也有可能是您因為一時疏忽,沒有將程式整套完整的上傳所導致的。


類型不相符
Provider 錯誤 '80020005'
類型不相符。
/bbnews/test.asp, 列50
當程式本身執行「類型錯誤的蒐尋」或「資料庫欄位類型與實際儲存資料無法相容」時,即會出現此一錯誤訊息。以下僅針對資料庫類型方面的錯誤,進行解說:
當您的 Ms Access 資料庫某欄位的預設 "資料類型" 與存檔資料發生衝突時,即會出現錯誤 。 例如,資料庫中的 NUMBER 欄位,若預設祇能儲存阿拉伯數字,但您卻試圖將中文字資料存入 NUMBER 欄位。
倘若欲在 NUMBER 這個欄位儲存中文字或其他資料,您可運用 Microsoft Access 程式開啟整個資料庫,將 NUMBER 欄位原本預設的 "資料類型" 修改為「文字」類型或「備註」類型即可。


當物件關閉時不允許操作
ADODB.Connection (0x800A0E78)
當物件關閉時,不允許操作。
/guestbook/index.asp, line 80
當您尚未 rs.open 開啟資料庫時,即欲執行讀取資料庫的指令;或資料庫已經關閉,您卻重覆下達 rs.close 關閉資料庫指令;也可能是指令 rs.close 放置不當,導致資料庫提前被關閉,後續程式無法執行。


此處需要物件
Microsoft VBScript 執行階段錯誤 (0x800A01A8)
此處需要物件: 'rs'
/Data/test.asp, line 168
一般而言,是您開啟資料庫所使用的宣告方式與找尋資料的類型不一致或尚未定義所導致的。例如您若使用 Set rs2 = GetMdbRecordset( "loveadam.mdb", SQL ) 定義,但稍候卻使用到 IF not rs.eof THEN ..... 或者是想從資料庫帶出某些欄位的資料 session("User") = rs("User") ,但由於 'rs' 尚未正確定義或者呼叫程序有錯誤時,就會出現這一個錯誤訊息。


無法更新資料庫
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][ODBC Microsoft Access Driver] 無法更新。資料庫或物件是唯讀的。
請檢查資料庫這一個檔案,是否本身已被設定為唯讀屬性(將滑鼠置於資料庫再按下右鍵選「內容」,將可以設定資料庫的屬性與讀寫的權限)。
此外,也有可能是您之前的程式碼撰寫的並不完整,將資料庫開啟使用但最後沒有下達關閉指令,導致其他程式無法再讀取及寫入資料,這時您必須先將開啟的資料庫予以關閉,才能正常執行後續的程式碼。


無法開啟登錄鍵
[Microsoft][ODBC Microsoft Access Driver]一般錯誤 無法開啟登錄鍵 'Temporary (volatile) Jet DSN for
process 0x898 Thread 0x914 DBC 0x209e024 Jet'
嚴格說起來,會出現這個錯誤訊息的情況有頗多的因素。一般最常見的是程式呼叫資料庫的路徑設定有錯誤,例如虛擬目錄或實體目錄的路徑在語法使用上有錯誤。
除此之外,當程式試圖要從資料庫讀取或寫入一筆資料,但資料庫並不存在指定的欄位定義值時,或者資料庫設有密碼,因為密碼錯誤而無法順利開啟資料庫的時後,都會出現無法開啟登錄鍵的錯誤訊息。
若您是使用自己的主機架設網站,則需確認資料庫與資料庫所在資料匣,一般訪客使用者是否擁有讀取與寫入資料的權利。


運作必須使用更新查詢
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][ODBC Microsoft Access Driver] 運作必須使用更新查詢
會造成這一類型的錯誤原因有很多, 例如在SQL程式語法中的指令無法讓伺服器理解,或者是一些運算方式及符號(例如引號、括號)標示位置不當或缺少符號標示,都可能會出現這一類型的錯誤訊息。


資料表被鎖定
Database Engine error '80004005' Table 'tblTable' is exclusively locked by user 'Admin' on machine
'MyMachine'.
當您使用自己的主機架設網站,在執行程式的之前,您也開啟資料庫進行設計與修改,導致程式對於資料庫沒有執行的權限。這一個錯誤情況,通常不會在虛擬主機上面發生。


BOF 或 EOF 的錯誤
ADODB.Recordset 錯誤 '800a0bcd'
可能是 BOF 或 EOF 的值為 True,或目前的記錄已被刪除。應用程式所要求的操作需要目前的記錄。
當使用者執行程式時,若在資料庫找不到符合的資料,或是資料筆數為零的時候,都可能會出現這個錯誤訊息。
一個有經驗的程式設計人員,為了避免這個錯誤情況的發生,通常會將程式碼撰寫的更理想,例如當程式查無符合資料時,出現適當的訊息告知使用者或訪客。
例如在SQL蒐尋指令後加入:
<%
IF RS.EOF THEN
Response.Write "非常抱歉,目前沒有任何符合的資料。"
Response.End
END IF
%>


參數太少
Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e10'
[Microsoft][ODBC Microsoft Access Driver] 參數太少,預期個數 1。
這一類型的錯誤,通常都是程式中SQL所下達的指令有錯誤,或是指定的欄位名稱與資料庫的實際資料表的欄位名稱不符合。除此之外,也有可能是SQL下達指令運用到的變數值,您尚未給予定義。


CloseWindow