文章中的信息适用于:
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 权限,因而无法访问基于文件的数据库或包含文件的文件夹。请检查这些文件和文件夹的权限设置。 确认您能够创建和/或删除任何临时文件。 临时
文件一般都创建在与数据库相同的文件夹下,但也可以创建在其它文件夹下,如 /Winnt。您可以使用 Windows NT 文件监视器来检查访问文件失败的原因。 Windows NT 文件监视器可从以下 Web 站点上得到:
当访问链接到某个表的 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.
请从以下 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_。
因为该帐户是 Web 服务器的本地账户,所以网络上的其它计算机根本无从得知该帐户。当 IIS(在 IUSR 帐户的安全环境下运行)试图访问远程计算机上的任何资源时,远程计算机将验证其使用的帐户。 由于 IUSR 帐户是本地帐户,因此对于远程计算机来说,它是无从得知的,所以访问被拒绝。
当匿名访问引发这个问题时,有两个解决办法:
在“Internet 服务管理器”工具中,从 Web 属性下将匿名登录帐户从默认的本地帐户改为一个基于域的有效帐户。 在用户名字段中,输入要使用的域帐户,格式为 domain\userid。 这样,远程计算机就能用域控制器来验证 IIS 传递给它的安全凭据。
-或者-
在包含您想要访问的资源的远程计算机上复制的帐户
IUSR_。 如果帐户是在远程计算机上创建的,包含完全相同的名称和密码,Windows NT 把它
们视为等价帐户。
默认情况下,IIS 被配置为以 Windows NT Challenge/Response 作为其身份验证方法。
由于 Windows NT 4.0(及更早版本)安全模型的限制,经过 Windows NT Challenge/Response 身份验证的用户也无法访问远程计算机上的资源。 这通常
称为委派问题。 要验证是不是这种情况,可在“Internet 服务管理器”工具中,从 Web 属性下选择基本(明文)复选框,然后清除 Windows NT Challenge/Response。 如果这一步骤解决了问题,很明显这是一个委派问题。
-或者-
如果问题仍旧存在,可能是所使用的用户帐户没有正确的 SQL Windows NT 计算机权限。 不妨尝试使用一个明确拥有该SQL 计算机访问权限的帐户。
有关委派、IIS 如何通过身份验证来保护 Web 站点,以及相关问题的详细信息,请参见文章“IIS Authentication and
Security for Internet Developers”,
它位于以下 Web 站点:
http://www.microsoft.com/workshop/s...re/security.asp
错误消息
Microsoft OLE DB Provider for ODBC Drivers error '80004005' Microsoft][ODBC Microsoft SQL Driver] Logon Failed()
原因
该错误是在 SQL 服务器不接受或不认可所提交的登录帐户及/或密码(使用标准安全性时),或者没有任何 Windows NT帐户映射到 SQL 帐户(使用集成安全性时)时,由 SQL 服务器生成的。
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] '(unknown)' isn't a valid path. Make sure that the path name is spel
led 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
原因
“允许匿名用户”环境被关闭时,WINDOWS NT 在第一个请求完成后要关闭与 SQL SERVER 连接的管道。 这是因为,第一个到 SQL SERVER 的连接是在 IIS 匿名用户帐户中建立的。 然后,IIS 或者选择在同一线程上模拟浏览器客户,或者尝试去访问运行于模拟用户环境中的其它线程上的连接。 无论是哪种情况,WINDOWS NT 都会检测有没有谁试图使用某个已在其它用户环境中打开的网络命名管道句柄,并根据安全规则关闭该管道。 在 SQL SE
RVER 网络监视器看来,这是WINDOWS NT 发出的关闭命名管道的请求,从而引起 WEB 浏览器出错。
错误消息
MICROSOFT OLE DB PROVIDER FOR ODBC DRIVERS ERROR '80004005' [MICROSOFT][ODBCSQL SERVER DRIVER][DBMSSOCN] GENERAL NETWORK ERROR. CHECK YOUR NETWORK DOCUMENT