結論
本文詳細說明 Microsoft 資料存取元件 (MDAC) 收到 0x800040005 錯誤的一些常見原因。MDAC 包括 ActiveX 資料物件、OLE DB 和遠端資料服務 (RDS)。此外,本文中還討論了其它錯誤訊息,包括 80040e21、80040e14 和 80040e10。
其他相關資訊
80004005 錯誤訊息可歸納為:「基於某種原因,無法存取您的資料」。本文包含各種 80004005 錯誤訊息的清單,其中列舉出這些錯誤訊息最常見的原因及疑難排解步驟。本文假設您是在 Active Server Page (ASP) 頁面 (.asp) 中使用 ActiveX 資料物件 (ADO),這些原因和多數疑難排解步驟,同樣適用於任何其它透過 ODBC 存取資料的環境。
錯誤訊息清單
本章節介紹各種錯誤訊息的文字,以及導致錯誤的原因。
錯誤訊息
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Microsoft Access 97 Driver] The Microsoft Jet database engine cannot open the file '(unknown)'. It is already opened exclusively by another user, or you need permission to view its data.
原因
該錯誤的發生,通常是由於 Internet Information Server (IIS) 所使用的帳戶(通常是 IUSR)沒有正確的 Windows NT 野i權,因此無法存取以檔案為基礎的資料庫,或包含檔案的資料夾。
存取可連結到某表格的 Microsoft Access 資料庫時,如果此表格位於網路伺服器的 Access 資料庫中,本錯誤也有可能發生。這種情況下,請參墨H下 Microsoft Knowledge Base 文件以找出解決方法:
Q189408 PRB:ASP 無法存取 IIS 4.0 下的網路檔案
錯誤訊息
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Microsoft Access 97 Driver] Couldn't use '(unknown)'; file already in use.
原因
資料庫無法正確地為多個使用者進行鎖定。詳細資訊請參墨H下 Microsoft Knowledge Base 文件:
Q174943 PRB: 80004005 "Couldn't use '(unknown)'; file already in use"
錯誤訊息
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified.
原因
最常見的原因,是由於 Global.asa 和 Global.asa 中的工作階段變數進行初始化時,未觸發連結字串。您可以在 .asp 頁面中加入以下程式碼,來檢查該變數是否正確初始化:
<%= "'auth_user' is " & request.servervariables("auth_user"%>
<P>
<%= "'auth_type' is " & request.servervariables("auth_type"%>
<P>
<%= "connection string is " & session("your_connectionstring"%>
<P>
檢查並確認是否安裝最新的驅動程式。如果無法確定,請從以下 Web 網址下載最新的 MDAC(Microsoft 資料存取元件):
https://www.microsoft.com/data/
錯誤訊息
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Driver Manager] Data source name not ??
原因
這個問題看起來與電腦上軟體安裝或卸載的順序有關。如果 ODBC 核心檔案不同步(必須為同一版本),就可能出現這種錯誤。
請從以下 Web 網址下載最新版的 MDAC(Microsoft 資料存取元件),為所有的 ODBC 核心驅動程式升級:
https://www.microsoft.com/data/
錯誤訊息
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Access 97 ODBC driver Driver]General error Unable to open registry key 'DriverId'.
原因
此錯誤是由登錄讀取數值時引起的。請用登錄編輯器、Regedt32.exe 檢查登錄機碼設定的野i權。您也可以使用 Windows NT 登錄監視器 (NTRegMon) 來檢查登錄讀取失敗的原因。NTRegMon 可從下列 Web 網址下載:
https://www.sysinternals.com
錯誤訊息
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC SQL Server Driver][dbnmpntw]ConnectionOpen (CreateFile()).
原因
本錯誤有兩種原因,皆與野i權和資料庫有關,一則是由於資料庫和 Web 伺服器位在不同電腦上,二則是資料庫正透過 UNC 路徑 (\ServerShare) 進行參照。即使資料庫與 Web 伺服器位於同一台電腦上,UNC 路徑也會讓 Web 伺服器誤以為資料庫位在網路上的另一台電腦上。
如果 .asp 頁面正由匿名使用者存取,就會發生以下情況:
IIS 將使用(預設)Windows NT 帳戶:
USR_<machinename
>。
該帳戶是 Web 伺服器的本機帳戶,所以網路上的其它電腦根本無從得知該帳戶。當 IIS(在 IUSR 帳戶的安全環境下執行)試圖存取遠端電腦上的任何資源時,遠端電腦會試圖驗證其使用的帳戶。由於 IUSR 帳戶是本機帳戶,因此對於遠端電腦來說無從得知,所以存取被拒絕。
預設情況下,IIS 組態以 Windows NT Challenge/Response 作為其身份驗證方法。由於 Windows NT 4.0(及更舊版本)安全模式的限制,即使通過 Windows NT Challenge/Response 身份驗證的使用者,亦無法存取遠端電腦上的資源。這一般稱為授權問題。要驗證是否為這種情況,可於「網路服務管理員」工具中,從 [Web] 內容選擇 [基本] (清除文字)核取方塊,然後清除 Windows NT Challenge/Response。如果此步驟可解決問題,則明顯表示此為授權問題。
-或者-
如果問題仍舊存在,可能是所使用的使用者帳戶,未獲得正確的 SQL Windows NT 電腦野i權。不妨嘗試使用一個確實擁有該 SQL 電腦存取野i的帳戶。
有關授權、IIS 如何透過身份驗證來保護 Web 網址,以及相關問題的詳細資訊,請參齒鴝韞H下 Web 網址「IIS Authentication and Security for Internet Developers」:
https://www.microsoft.com/workshop/server/feature/security.asp
錯誤訊息
Microsoft OLE DB Provider for ODBC Drivers error '80004005' Microsoft][ODBC Microsoft SQL Driver] Logon Failed()
原因
該錯誤是在 SQL 伺服器不接受或不認可所提交的登入帳戶及/或密碼(使用標準安全性時),或者沒有任何 Windows NT 帳戶映射到 SQL 帳戶(使用整合安全性時)時,由 SQL 伺服器所產生。
如果使用標準安全性,則 SQL 帳戶名稱和密碼不正確。請嘗試使用系統管理員帳戶和密碼(UID= "SA",密碼為空字串)。這些必須在連結字串列中定義,因為 DSN 不儲存使用者名稱和密碼。
如果使用整合安全性,則檢查呼叫整頁模式的 Windows NT 帳戶,找出其映射的目的地帳戶。
SQL 不允?SQL 帳戶名稱中加底線。如果某人將 Windows NT 帳戶 IUSR_machinename 手動映射到同名的 SQL 帳戶,就會失敗。請將所有包含底線的帳戶,都映射為 SQL 中不包含底線的帳戶名稱。
錯誤訊息
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC SQL Server Driver][SQL Server] Login failed- User: Reason: Not defined as a valid user of a trusted SQL Server connection.
原因
SQL Enterprise Manager(企業管理員)中開啟了整合安全性,所使用的 Windows NT 帳戶未映射到 SQL 帳戶。
錯誤訊息
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Microsoft Access 97 Driver] Couldn't lock file.
原因
本錯誤可能是由於沒有正確的野i權,可為 Microsoft Access 資料庫建立鎖定檔案 (.ldb) 而引起。預設情況下,鎖定檔案與 Microsoft Access .mdb 檔案建立在同一資料夾內。
錯誤訊息
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Microsoft Access 97 Driver] '(unknown)' isn't a valid path. Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides.
原因
Web 伺服器所讀取的路徑是無效路徑。若 Global.asa 檔案正在使用,且連結字串由 Web 伺服器之外的另一台電腦所建立時,最容易發生這種錯誤。 如果路徑是一個映射磁碟機號,它可能只對建立連結字串的客戶電腦有效。
錯誤訊息
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC SQL Server Driver][SQL Server] The query and the views in it exceed the limit of 16 tables.
原因
查詢過於複雜。在查詢中有過多的限制。
錯誤訊息
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC SQL Server Driver][DBNMPNTW] ConnectionWrite (GetOverLappedResult()).
原因
「啟動匿名使用者」環境關閉時,Windows NT 在完成第一個請求後,要關閉與 SQL Server 連結的管道。這是因為第一個到 SQL Server 的連結,是在 IIS 匿名使用者帳戶中建立的。接著,IIS 選擇在同一執行緒中模擬瀏覽器用戶端,或者嘗試存取模擬使用者文字中,執行的其他執行緒連結。無論是何種情況,Windows NT 都會偵測是否試圖使用某個已在其它使用者環境中開啟的網路具名管道控制碼,並根據安全規則關閉該管道。在 SQL Server 網路監視器看來,這是 Windows NT 發出的關閉具名管道請求,所引起的 Web 瀏覽器錯誤。
錯誤訊息
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC SQL Server Driver][DBMSSOCN] General network error. Check your network document
原因
本錯誤可能發生在 SQL 伺服器重新命名的情況下。由於找不到電腦名稱,而參照舊名稱的 DSN 會導致失敗。
錯誤訊息
Microsoft OLE DB Provider for ODBC Drivers error '80040e21' Errors occurred
原因
本錯誤可能由於嘗試在單一欄位中插入過多的資料,而超過野i值範圍所引起。例如,Microsoft Access 欄位格式設定只接受 25 個字元,卻試圖插入 26 個字元。
錯誤訊息
Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Microsoft Access 97 Driver] Syntax error in INSERT INTO statement.
原因
某行名稱可能是保留字,如 DATE。請將該行名稱改為非保留字,如 SaleDate。
錯誤訊息
Microsoft OLE DB Provider for ODBC Drivers error '80040e10' [Microsoft][ODBC Microsoft Access 97 Driver] Too few parameters. Expected 1.
原因
查詢語法中使用的行名稱不存在。這通常只是打字錯誤。請針對資料庫的行名,檢查查詢字串。如果使用 Microsoft Access,則應確保使用的是實際行名,而不是行的「顯示」名稱。
參考
有關如何啟動 Visual InterDev 的遠端工作站運作,請按照以下 Microsoft Knowledge Base 文件所述,建立系統 DSN:
Q178215 如何:組態 VID 以用於身份驗證 Web 專案
Q174943 PRB:80004005 "Couldn't use '(unknown)'; file already in use"