?? microsoft 數據訪問組件 (mdac) 收到 0x800040005 錯誤的一些常見原因.txt
字號:
本文詳細講述了 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 權限,因而無法訪問基于文件的數據庫或包含文件的文件夾。
請檢查這些文件和文件夾的權限設置。 確認您能夠創建和/或刪除任何臨時文件。 臨時文件一般都創建在與數據庫相同的
文件夾下,但也可以創建在其它文件夾下,如 /Winnt。
您可以使用 Windows NT 文件監視器來檢查訪問文件失敗的原因。 Windows NT 文件監視器可從以下 Web 站點上得到:
http://www.sysinternals.com 。
如果您使用的是該數據庫的網絡路徑(UNC 或映像驅動器),請檢查共享、文件及文件夾上的權限。
確認文件及數據源名 (DSN) 沒有被標記為獨占方式。
簡化。 使用一個使用本地驅動器號的系統 DSN。 如有必要,把數據庫移至本地驅動器,然后對其進行測試。
錯誤消息中的 other user(其它用戶)有可能是 Visual InterDev。 請關閉任何包含該數據庫數據連接的 Visual
InterDev 工程。
錯誤也可能是由委派問題引起的。 檢查可能存在的任何身份驗證方法(“基本”而不是 NTLM)。 如果連接字符串使用的
是統一命名約定 (UNC),請嘗試使用“基本身份驗證”或一個絕對路徑,如 C:\Mydata\Data.mdb。即使 UNC 指向的資源
位于本地 IIS 計算機,前述錯誤也有可能發生。
當訪問鏈接到某個表的 Microsoft Access 數據庫時,如果這一表處在網絡服務器上的 Access 數據庫中,這一錯誤也有
可能發生。 這種情況下,請參見以下 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.
原因
數據庫無法正確地為多個用戶鎖定。 詳細信息請參見以下 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>
另一個常見原因是因為所使用的連接字符串中有太多的空格。
DSN = MyDSN; Database = Pubs;
嘗試使用下面的語法代替:
DSN=MyDSN;Database=Pubs;
如果 Global.asa 文件沒有激發,請檢查并確認它是在 IIS 4.0 的應用程序根下,(如果運行的是 IIS 3.0,則應在虛擬
根下,并且 Execute 復選框已經選中)。 此外,當 Windows NT 權限限制了對文件夾的訪問時,程序設計中的一個錯誤
也可能會妨礙 Global.asa 文件被激發。詳細信息請參見 Microsoft Knowledge Base 文章: Q173742 “BUG: 限制
Web 訪問時,Global.asa 不被執行”
無法找到 DSN 名。 請檢查并確認沒有使用“用戶”類型的 DSN。
如果使用的是文件 DSN 或系統 DSN,則嘗試把連接字符串相應地改為 DSN=MySystemDSN 或 DBQ=MyFileDSN。 簡化!
檢查并確認安裝了最新的驅動程序。 如有您不能肯定,請從以下 Web 站點下載最新的 MDAC(Microsoft 數據訪問組
件):
http://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 核心驅動程序:
http://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) 檢查注冊表項上設置的權限。 您也可
以用 Windows NT 注冊表監視器 (NTRegMon) 來檢查注冊表讀取失敗。 NTRegMon 可從以下 Web 站點下載:
http://www.sysinternals.com
錯誤消息
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC SQL Server Driver][dbnmpntw]
ConnectionOpen (CreateFile()).
原因
這一錯誤有兩種原因。 它們都與權限有關,或者數據庫與 Web 服務器不在一臺計算機上,或者數據庫正通過 UNC 路徑
(\\Server\Share) 被引用。 即使數據庫與 Web 服務器位于同一臺計算機上,UNC 路徑也使 Web 服務器認為數據庫好象
位于網絡上的另一臺計算機上。
如果 .asp 頁面正被匿名用戶所訪問,就會發生以下情況:
IIS 將使用(默認)Windows NT 帳戶:
USR_<machinename
>。
因為該帳戶是 Web 服務器的本地賬戶,所以網絡上的其它計算機根本無從得知該帳戶。 當 IIS(在 IUSR 帳戶的安全環
境下運行)試圖訪問遠程計算機上的任何資源時,遠程計算機將驗證其使用的帳戶。 由于 IUSR 帳戶是本地帳戶,因此對
于遠程計算機來說,它是無從得知的,所以訪問被拒絕。
當匿名訪問引發這個問題時,有兩個解決辦法:
在“Internet 服務管理器”工具中,從 Web 屬性下將匿名登錄帳戶從默認的本地帳戶改為一個基于域的有效帳戶。 在用
戶名字段中,輸入要使用的域帳戶,格式為 domain\userid。 這樣,遠程計算機就能用域控制器來驗證 IIS 傳遞給它的
安全憑據。
-或者-
在包含您想要訪問的資源的遠程計算機上復制的帳戶
IUSR_<machineaccount
>
。 如果帳戶是在遠程計算機上創建的,包含完全相同的名稱和密碼,Windows NT 把它們視為等價帳戶。
-或者-
如果 .asp 頁面只允許經身份驗證的訪問,請參考以下內容:
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -