設為首頁收藏本站

 取回密碼
 註冊
搜尋
熱搜: Redump discuz
檢視: 241|回覆: 0

【轉貼】 80004005 及其它錯誤訊息的疑難排解

[複製連結]
發表於 2002年1月1日 12:20:34 | 顯示全部內容 |閱讀模式
資訊:80004005 及其它錯誤訊息的疑難排解
更新日期: 23-Feb-2000
文件編號: CHT183060
--------------------------------------------------------------------------------
這篇文章中的資訊適用於:

Microsoft Data Access Components versions 1.5, 2.0, 2.1, 2.5
Active Server Pages
Microsoft Visual InterDev, version 1.0

--------------------------------------------------------------------------------


結論
本文詳細說明 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權,因此無法存取以檔案為基礎的資料庫,或包含檔案的資料夾。


請檢查這些檔案和資料夾的野i權設定。確認您能夠建立和/或刪除任何暫存檔。暫存檔一般都和資料庫建立在同一資料夾,但也可以建立在其它資料夾內,如 /Winnt。


您可以使用 Windows NT 檔案監視器來檢查存取檔案失敗的原因。Windows NT 檔案監視器可從以下 Web 網址取得: https://www.sysinternals.com 。


如果您使用該資料庫的網路路徑(UNC 或映射磁碟機),請檢查資源分享、檔案及資料夾的野i權。


確認檔案及資料來源名稱 (DSN) 尚未標示為 [專用]。


簡化。採用一個使用本機磁碟機代號的系統 DSN。如有必要,將資料庫移至本機磁碟機,然後進行測試。


錯誤訊息中的 other user(其它使用者)有可能是 Visual InterDev。請關閉任何包含該資料庫資料連結的 Visual InterDev 專案。


錯誤也可能是由授權問題引起。檢查存在的任何身份驗證方法(基本與 NTLM)。如果連結字串使用統一命名約定 (UNC),請嘗試使用「基本身份驗證」或絕對路徑,如 C:MydataData.mdb。如果 UNC 指向的資源位於本機 IIS 電腦,前述錯誤也有可能發生。


存取可連結到某表格的 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&quothttps://www.fishman.idv.tw/phpforum/thread-861-1-1.html%>
<P>
<%= "'auth_type' is " & request.servervariables("auth_type&quothttps://www.fishman.idv.tw/phpforum/thread-861-1-1.html%>
<P>
<%= "connection string is " & session("your_connectionstring&quothttps://www.fishman.idv.tw/phpforum/thread-861-1-1.html%>
<P>




另一個常見原因,是由於使用的連結字串中有太多空白字元:
DSN = MyDSN; Database = Pubs;

嘗試使用下面的語法代替:
DSN=MyDSN;Database=Pubs;

如果未觸發 Global.asa 檔案,請檢查並確認該檔案位於 IIS 4.0 的應用程式根目錄下,或者若執行 IIS 3.0,則位於虛擬根目錄下並選取 Execute 核取方塊。此外,Windows NT 野i權限制對資料夾的存取時,程式設計中的錯誤也可能會妨礙 Global.asa 檔案觸發。詳細資訊請參?Microsoft Knowledge Base 文件: Q173742 「BUG:限制 Web 存取時,不執行 Global.asa」


找不到 DSN 名稱。請檢查並確認未使用「使用者」類型的 DSN。


如果使用的是「檔案」DSN 或「系統」DSN,請嘗試將連結字串改為 DSN=MySystemDSN 或 DBQ=MyFileDSN。簡化!

檢查並確認是否安裝最新的驅動程式。如果無法確定,請從以下 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 帳戶是本機帳戶,因此對於遠端電腦來說無從得知,所以存取被拒絕。

當匿名存取引發此問題時,有兩個解決辦法:


在 [網路服務管理員] 工具中,從 [Web] 內容將匿名登入帳戶,從預設的本機帳戶改為一個以「域」為基礎的有效帳戶。在 [使用者名稱] 欄位中,輸入要使用的域帳戶,格式為 domainuserid。這樣一來,遠端電腦就能用網域控制器來驗證 IIS 傳送給它的安全憑證。

-或者-


複製位於包含欲存取資源的遠端電腦上的帳戶
IUSR_<machineaccount
>

。如果帳戶建立於遠端電腦上,其中包含完全相同的名稱和密碼,則 Windows NT 將其視為相等帳戶。




-或者-


如果 .asp 頁面只啟動通過身份驗證的存取,請參考以下內容:

如果頁面不啟動匿名存取,IIS 會試圖驗證使用者身份,並使用其安全憑證來控制其所有活動,如存取資料庫的活動。下面針對這種失敗情形的兩個主要原因做出說明。


預設情況下,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 帳戶。


請嘗試將 SQL 改為使用標準安全性(在 Enterprise Manager 中,選擇 Server/SQL Server/Configure/Security Options/Standard。


如果您是在 IIS 4.0 下執行,則取消選擇該專案的 [密碼同步])。


錯誤訊息
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 檔案建立在同一資料夾內。


請嘗試賦予存取資料庫(通常是 IUSR_machinename)的使用者以資源分享/資料夾的完全控制野i權。


有時候因為檔案屬於唯讀檔,因此限制資源分享權限。您也可以嘗試更改連結模式,這時可以使用以下範例程式碼:
Set Conn = Server.CreateObject("ADODB.Connection&quothttps://www.fishman.idv.tw/phpforum/thread-861-1-1.html
Conn.Mode = adModeShareDenyWrite '8
'From Adovbs.inc
'---- ConnectModeEnum Values ----
'Const adModeUnknown = 0
'Const adModeRead = 1
'Const adModeWrite = 2
'Const adModeReadWrite = 3
'Const adModeShareDenyRead = 4
'Const adModeShareDenyWrite = 8
'Const adModeShareExclusive = &Hc
'Const adModeShareDenyNone = &H10




錯誤訊息
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"

Q173742 BUG: 限制 Web 存取時,不執行 Global.asa

Q172864 ASP 頁面無法存取工作階段及應用程式物件

Q156526 General Error=51 連結 Access 資料來源

Q175671 PRB: 80004005 ConnectionOpen (CreateFile()) Error Accessing SQL

Q149425 IDC:執行查詢錯誤,未定義為有效使用者

Q167452 PRB:使用 Access 資料來源時發生 Not a valid path 錯誤

Q125767 PRB:執行 SQL 查詢之後,查詢過於複雜的錯誤

Q166659 PRB:第二次嘗試時存取 SQL 資料庫失敗

Q166029 PRB:使用 Access 時,無法開啟不明檔案

Q178215 如何:組態 VID 以用於身份驗證 Web 專案

關鍵字: kbADO100 kbADO150 kbADO200 kbDatabase kbODBC kbRDS150 kbRDS200 kbDSupport kbMDAC200 kbMDAC150 kbMDAC210 kbMDAC250
發表的型式:
技術性:



更新日期: 23-Feb-2000
©2001 Microsoft Corporation 版權所有。保留所有權利及使用條款。

https://www.fishman.idv.tw/phpforum/thread-861-1-1.html
作者文章推薦
懶得打字嗎?讓本助手協助你 【使用進階編輯器請點選右方進階模式】
您需要登入後才可以回覆 登入 | 註冊

本版積分規則

手機版|Archiver|漁家小舖

GMT+8, 2024年4月29日 18:05 , Processed in 0.400310 second(s), 16 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回覆 返回頂端 返回清單