registry - 在常规帐户下调用 VB6 dll 方法的 VBA 代码会出现 ODBC 驱动程序错误,但在以管理员身份运行时有效

标签 registry dll odbc vb6

我在 Word 2016 中打开了一个引用 VB6 dll 的 Word 模板 (.dot)。当我使用我的常规用户帐户运行 VBA 代码时,我收到一条错误消息。当我在我的管理员帐户下运行它时,我没有收到错误。错误发生在引用对象的“Load()”方法调用上:

Dim m_Manager As New PrefixService.Manager
Call m_Manager.Load(subjectID, ClientID)

准确的错误是:

Run-time error '-2147467259 (80004005)': [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

我做了一些研究,但我在陌生的领域。我一直在阅读有关注册表和 ODBC 的内容。 PrefixService.Manager 在注册表中有一个条目,用户可以读取它。至于 ODBC 数据源管理员,我不确定要查找什么,但搜索结果提到连接字符串和 Microsoft Access 很多,尽管我不确定它们与我引用 dll 并从中执行代码有什么关系。已安装 Microsoft Access 2016。我在 WINWORD 进程上运行了 Windows Sysinternals ListDlls 命令,发现 dll 从未加载过,但是,在我的管理员帐户下,我可以看到 dll 已加载。在 ODBC 数据源管理器中,我运行了一个跟踪,但不幸的是我不会说 ODBC 并且发现它很难理解。我相信以下部分包含有关该问题的信息:

o "u"           1260-ca4    ENTER SQLDriverConnectW 
    HDBC                0x0BA01850
    HWND                0x00000000
    WCHAR *             0x5A768B34 [      -3] "******\ 0"
    SWORD                       -3 
    WCHAR *             0x5A768B34 
    SWORD                       -3 
    SWORD *             0x00000000
    UWORD                        0 <SQL_DRIVER_NOPROMPT>

o "u"           1260-ca4    EXIT  SQLDriverConnectW  with return code -1 (SQL_ERROR)
    HDBC                0x0BA01850
    HWND                0x00000000
    WCHAR *             0x5A768B34 [      -3] "******\ 0"
    SWORD                       -3 
    WCHAR *             0x5A768B34 
    SWORD                       -3 
    SWORD *             0x00000000
    UWORD                        0     <SQL_DRIVER_NOPROMPT>

    DIAG [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) 

o "u"           1260-ca4    ENTER SQLGetDiagRecW 
    SQLSMALLINT                  2 <SQL_HANDLE_DBC>
    SQLHANDLE           0x0BA01850
    SQLSMALLINT                  1 
    SQLWCHAR *          0x0036E93C
    SQLINTEGER *        0x0036E514
    SQLWCHAR *          0x0036E53C 
    SQLSMALLINT                512 
    SQLSMALLINT *       0x0036E524



o "u"           1260-ca4    EXIT  SQLGetDiagRecW  with return code 0 (SQL_SUCCESS)
    SQLSMALLINT                  2 <SQL_HANDLE_DBC>
    SQLHANDLE           0x0BA01850
    SQLSMALLINT                  1 
    SQLWCHAR *          0x0036E93C [       5] "IM002"
    SQLINTEGER *        0x0036E514 (0)
    SQLWCHAR *          0x0036E53C [      91] "[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified"
    SQLSMALLINT                512 
    SQLSMALLINT *       0x0036E524 (91)

除了它似乎是基于权限之外,我现在不知所措。哦,操作系统是 Windows 7 Enterprise

最佳答案

来这里说我有相同的错误代码 -2147467259 (80004005) 事实证明,我的用户运行的旧 Excel 工作表仅与 Office x86 兼容

我用 Office 2019 x64 制作了一个新服务器 - 当我将 office 重新安装到 x86 时,宏运行良好

ODBC 实例以 x32 和 x64 表示。

所以检查你是否有 x64 和 x86 问题:)

关于registry - 在常规帐户下调用 VB6 dll 方法的 VBA 代码会出现 ODBC 驱动程序错误,但在以管理员身份运行时有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55385551/

相关文章:

c++ - 即使未包装在 extern "C"中,也会调用 DllMain() 吗?

amazon-web-services - PowerBI Athena Beta 连接器详细信息 : "We cannot convert the value null to type Record."

asp.net - SYBASE ODBC .Net 核心

windows - 如何将多个文件名传递给上下文菜单 Shell 命令?

windows - WiX Burn Bootstrapper - 无法检测注册表项

c++ - OpenCV - 缺少调试 DLL 库

c# - 无法在 C# 中加载 DLL

sql - 使用 SQL DB for i 的行的最高百分比

windows - 使用 Win32::Registry 在 Linux 机器中出现问题

c# - 如何在文本框中显示注册表项 C#