Код VBA, вызывающий метод dll VB6 под обычной учетной записью, получает ошибку драйвера ODBC, но работает при запуске от имени администратора - PullRequest
3 голосов
/ 27 марта 2019

У меня есть шаблон Word (.dot), открытый в Word 2016, который ссылается на VB6 dll.Когда я запускаю код VBA со своей учетной записью обычного пользователя, я получаю сообщение об ошибке.Когда я запускаю его под своей учетной записью администратора, я не получаю сообщение об ошибке.Ошибка возникает при вызове объекта «Load ()», на который ссылаются объекты:

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

Точная ошибка:

Ошибка времени выполнения '-2147467259 (80004005)':[Microsoft] [ODBC Driver Manager] Не найдено имя источника данных и не указан драйвер по умолчанию

Я провел некоторые исследования, но нахожусь на незнакомой территории.Я продолжаю читать вещи о реестре и ODBC.В реестре есть запись для PrefixService.Manager, и пользователи имеют доступ к ней для чтения.Что касается администратора источников данных ODBC, я не уверен, что искать, но в результатах поиска часто упоминаются строки подключения и Microsoft Access, хотя я не уверен, что они имеют отношение ко мне, ссылающейся на dll и выполняющему код из нее.Microsoft Access 2016 установлен.Я запустил команду Windows Sysinternals ListDlls в процессе WINWORD и увидел, что dll никогда не загружалась, однако под моей учетной записью Admin я вижу, что dll загружается.В ODBC Data Source Administrator я выполнил трассировку, но, к сожалению, я не говорю на 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

...