Как исправить невозможность загрузки DAO DLL в Access 2003 на Windows 7? - PullRequest
3 голосов
/ 17 марта 2012

У меня есть приложение, которое использует внешний интерфейс 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. Мы переходим на 64-разрядную версию Windows 7.

Ответы [ 4 ]

2 голосов
/ 22 марта 2012

Если бы я был на вашем месте, я бы попробовал следующее:

  1. Удалите и переустановите Access

    И я бы запустил очиститель реестра, например CCleaner, дляУдалите неработающую ссылку на библиотеку из реестра, прежде чем переустанавливать Access и применять все обновления.
    Тот факт, что dao360.dll отсутствовал или был неправильно зарегистрирован, показывает, что существует хотя бы одна проблема установки на этом компьютере.
    Кроме того,удалите и переустановите драйверы ODBC для других баз данных.

  2. Попробуйте на том же компьютере другого пользователя

    Создайте нового пользователя на компьютере, затем войдите в системупод этим пользователем и убедитесь, что проблема все еще возникает.

  3. Попробуйте с другого компьютера

    Используйте ту же базу данных, убедитесь, что ссылки DAO выбраны, и попробуйтеснова запрос кода.
    Если он все еще не работает, то есть еще одна проблема, которая не связана с DAO.

  4. Вы упоминаете об использовании Sybase и SQLСервер.

    Правильно ли работают драйверы ODBC?Может ли быть там также какое-то повреждение на машине?
    Что если вы создадите новую базу данных и попробуете один сквозной запрос, используя ту же строку подключения?

  5. 32 и 64битовое смешивание

    Вы уверены, что все зависимые драйверы программного обеспечения и базы данных установлены для 32-битной версии?
    Если вы пытаетесь получить доступ к источнику данных ODBC, который использует 64-битный драйвер из 32-битного приложения, произойдет сбой.1036 * В Win7 x64 консоль ODBC доступна из Средства администрирования в Панель управления - это , а не 32bit!
    Вам необходимо создать DSN с помощью C:\Windows\SysWOW64\odbcad32.exe вместо.

1 голос
/ 18 марта 2012

Нет необходимости пытаться перерегистрировать библиотеку dao здесь, и это глупая погоня за дикими гусями, которая тратит впустую ресурсы компании.Установка Access 2003 на этот компьютер должна работать очень хорошо, а установка 2003 на этом компьютере ТАКЖЕ правильно установит библиотеки DAO (попытка скопировать и перерегистрировать библиотеку DAO потенциально может превратить ваш компьютер в полный беспорядок здесьсделайте это, и это не требуется).

Есть или неработающие ссылки, или, возможно, библиотека ADO была помещена выше в ссылках по сравнению с библиотекой DAO.На самом деле проверьте ссылки в редакторе VBA.Если ADO не используется, удалите ссылку.

Также, если Outlook используется из этого приложения, удалите ссылку на Outlook в этом приложении.Вам действительно необходимо использовать позднюю привязку для кода автоматизации Outlook.

Я запустил Access 2003 на Windows 7 x64 начиная с бета-версии win 7, и у меня здесь было ноль проблем.Это не имеет ничего общего с x64 или win7, а только с поведением типичной неработающей ссылки.

1 голос
/ 17 марта 2012

Решение, которое я придумал, состояло в том, чтобы использовать слабую типизацию и ссылаться на все объекты DAO через CurrentDb. Единственные ссылки, которые у меня есть в моем проекте, это VBA и библиотека объектов Microsoft Access, которые в любом случае необходимы. Это немного радикально, но дает вам кое-что, что можно развернуть на любой платформе.*

Проект каждой вновь созданной базы данных Access содержит ссылку на библиотеку DAO.Но ссылки на библиотеки DAO больше не обновляются при развертывании баз данных на разных компьютерах. Эта функция была нарушена в Access 2007, когда библиотека DAO была переименована.

В вашем примере это будет:

Dim qryDef As Object
For Each qryDef In CurrentDb.QueryDefs
0 голосов
/ 12 января 2018

Проблема возникает, когда установлены версии OS / Access для x86 и x64.

  1. Вам необходимо создать каталог (я уверен, что он не существует, и для этого вам нужны права администратора):C: \ Program Files \ Common Files \ microsoft shared \ DAO
  2. Скопируйте dao360.dll из C: \ Program Files (x86) \ Common Files \ microsoft shared \ DAO в каталог, созданный на шаге (1)
  3. Теперь добавьте ссылку в ваше приложение VBA.
...