如何更正无法在Windows 7上的Access 2003中加载DAO DLL?

时间:2012-03-16 20:23:49

标签: ms-access vba windows-7 dao

我有一个使用MS Access 2003前端连接到MS SQL和Sybase数据库的应用程序。此应用程序使用VBA(Visual Basic 6),这不能更改。我们正处于从Windows XP(应用程序运行正常)到Windows 7的转换过程中。

在Windows 7上,尝试连接Sybase数据库失败。应用程序使用传递查询,当发生故障时,我收到以下消息:

An unexpected error occurred in Call_SP.
Error number: 48
Error description: Error in loading DLL
Error source: Secure open security

抛出错误的特定代码行是:

For Each qryDef In dbLocal.QueryDefs

此行代码中的项目定义如下:

Dim dbLocal As Database
Dim qryDef As QueryDef

Set dbLocal = CurrentDb()

最初启动应用程序时,Microsoft DAO 3.6对象库缺少引用。我将dao360.dll文件复制到C:\ Program Files(x86)\ Common Files \ Microsoft Shared \ DAO,使用regsvr32.exe注册它,并将引用(工具 - >引用)设置为此文件。

此时,我怀疑问题可能与此计算机上的用户权限有关,但我仍然坚持从哪里开始。用户对dao360.dll文件具有“读取和执行”权限。

我们有很多用Access编写的遗留应用程序,所以我们的系统使用Access 2003,但是使用Word,Excel和Outlook 2010.我们正在转向Windows 7 64位。

4 个答案:

答案 0 :(得分:2)

如果我在你的鞋子里,我会尝试以下方法:

  1. 删除并重新安装Access

    我会运行一个像CCleaner这样的注册表清理程序,在重新安装Access并应用所有更新之前从注册表中删除损坏的库引用。
    dao360.dll丢失或注册不正确的事实表明该机器上至少存在一个安装问题。
    另外,删除并重新安装其他数据库的ODBC驱动程序。

  2. 尝试来自其他用户的同一台计算机

    在计算机上创建新用户,然后在该用户下登录并检查是否仍然出现此问题。

  3. 尝试使用其他计算机

    使用相同的数据库,确保选择了DAO引用,然后再次尝试代码查询 如果它仍然不起作用,那么在某个地方还有另一个问题,它与DAO无关。

  4. 您提到使用Sybase和SQL Server。

    ODBC驱动程序是否正常运行?机器上也有腐败吗?
    如果您使用相同的连接字符串创建新数据库并尝试单个传递查询,该怎么办?

  5. 32位和64位混合

    您确定所有依赖软件和数据库驱动程序都是为32位安装的吗? 如果您尝试从32位应用程序访问使用64位驱动程序的ODBC数据源,则会失败 在Win7 x64中,控制面板管理工具提供的ODBC控制台 32位! 您需要使用C:\Windows\SysWOW64\odbcad32.exe来创建DSN。

答案 1 :(得分:1)

我想出的解决方案是使用弱类型,并通过CurrentDb引用所有DAO对象。 我项目中唯一的引用是VBA和Microsoft Access对象库,无论如何都是必需的。它有点激进,但它确实为您提供了可以部署在任何平台上的东西。 / p>

每个新创建的Access数据库的项目都包含对DAO库的引用。但是,在不同计算机上部署数据库时,不再更新DAO库引用。 在重命名DAO库时,Access 2007中已破坏该功能。

在您的示例中,这将是:

Dim qryDef As Object
For Each qryDef In CurrentDb.QueryDefs

答案 2 :(得分:1)

没有必要尝试在这里重新注册dao库,这样做是一场愚蠢的疯狂追逐,相当于浪费公司资源。在该计算机上安装Access 2003应该可以正常工作,并且在该计算机上安装2003也将正确安装DAO库(尝试复制和重新注册DAO库有可能将您的计算机变成一个完整的混乱 - 请勿这样做并且不需要)。

与DAO库相比,有一些损坏的引用或者ADO库可能位于引用的更高位置。实际上检查VBA编辑器中的引用。如果未使用ADO,则删除引用。

此外,如果正在使用此应用程序中的outlook,则删除此应用程序中的outlook引用。您真的需要使用后期绑定Outlook自动化代码。

我从win 7 beta开始在Windows 7 x64上运行Access 2003,我在这里没有问题。这与x64或win7无关,只与典型的破坏引用的行为无关。

答案 3 :(得分:0)

当x86和x64版本的OS / Access被安装时出现问题。

  1. 您需要创建目录(我确定它不存在,您需要管理权限才能执行此操作): C:\ Program Files \ Common Files \ microsoft shared \ DAO
  2. 从C:\ Program Files(x86)\ Common Files \ microsoft shared \ DAO复制dao360.dll 到步骤(1)中创建的目录
  3. 现在在VBA应用程序中添加引用。