Подтвердить что ты не робот

Поставщик Microsoft.ACE.OLEDB.12.0 больше не может открывать .mdb под Windows 8

У меня есть приложение x64, которое использует поставщик Microsoft.ACE.OLEDB.12.0 для чтения базы данных MS Access в Windows 7 (x64), и она отлично работает (установлен Office 2010).

То же самое приложение, запущенное под Windows 8 с установленным Office 2013, выходит из строя с сообщением о том, что провайдер не может открыть предыдущие версии.

В Windows 8 с установленным Office 2013 также есть Microsoft.ACE.OLEDB.15.0, но я дважды проверил свой код и уверен, что он указывает 12.0 в строке подключения.

Существуют ли разные "версии" этого провайдера или есть что-то, что я пропустил?

Я перекомпилировал тестовую программу под Windows 8 для использования платформы x86 и сменил поставщика на Microsoft.Jet.OLEDB.4.0, и все это снова работает. К сожалению, модуль является частью более крупной экосистемы, которая должна быть выполнена под управлением x64 (в частности, подключаемого модуля к excel), а база данных доступа загружается пакетом с веб-сайта поставщика приложением, поэтому нецелесообразно преобразовать базу данных или изменить все на x86.

Спасибо заранее.

4b9b3361

Ответ 1

Мне пришло в голову проверить версии файлов, которые использовались для каждого провайдера, и охотиться через реестр, обнаружили, что при чистой установке Windows 8 с установленным Office 2013 оба поставщика указывают на одну и ту же сборку.

(C:\Program Files\Common Files\microsoft shared\OFFICE15\ACEOLEDB.DLL)

Затем я загрузил и перезапустил Microsoft Access Database Engine Redistributable (http://www.microsoft.com/en-us/download/details.aspx?id=13255), который затем установил правильную версию поставщика 12.0 в C:\Program Files\Common Files\microsoft shared\OFFICE14\ACEOLEDB.DLL, и приложение ведет себя как ожидалось.

Казалось бы странным, что MS включила провайдера с брендом 12.0, который больше не ведет себя как 12.0.

В любом случае - надеюсь, что кто-то поможет от 4-5 часов вытягивания волос...

Craig

Ответ 2

Проблема с установкой старшего перераспределяемого ACE заключается в том, что при следующем запуске Access в Office 2013 Office будет "ремонтировать" себя и переключить указатель на версию 12 обратно в каталог Office15.

Ответ 3

Я использую Windows 8.1 64bit и Microsoft Office 2013 Я установил "Microsoft Access Database Engine 2010 Redistributable" , но ничего не изменилось, и у него такая же ошибка. НО! Установка "2007:" Компоненты подключения к данным " решила проблему.

Я нашел это решение через ссылку .

пытается подключиться к базе данных Access в visual studio, но сохранить получить эту ошибку?

попробуйте установить это сначала: http://www.microsoft.com/download/en/details.aspx?id=13255

однако, если, как и я, это не работает для вас, попробуйте следующее Метод:

ПРИМЕЧАНИЕ: это РАБОТАЕТ для офиса 2010 года, даже если это за 2007 год офис, не спрашивайте меня, почему он просто делает:)

Ответ 4

Просто, чтобы прояснить поведение, описанное OP:

С Office 2013 (ACE 15.0) Microsoft отменила поддержку mdb файлов, созданных с помощью Jet 3.x и ранее (то есть Access 97 и ранее). Поэтому я решительно полагаю, что база данных OP, которая вызвала проблему, была Access97-DB. Базы Jet 4.0 (Access 2000, as..mdb) по-прежнему поддерживаются и не будут вызывать ошибок.

Тот факт, что Office 2013 также регистрирует свои новые драйверы в качестве более ранних версий, представляет собой преднамеренную попытку MS, чтобы поддерживать работу многих программ и скриптов, имеющих встроенное встроенное имя поставщика. Как вы узнали о своем обновлении, это только поддерживает много, а не все...

Ответ 5

Кроме того, похоже, что 32-разрядная версия Распространяемого продукта работает для Office 2013_64 бит на 64-битной ОС Windows, тогда как 64-разрядная версия Распространяемого не была в моем случае

Ответ 6

  • Установите Microsoft Access Database Engine 2010 Распространяемый x 64 (http://www.microsoft.com/en-us/download/details.aspx?id=13255)
  • конвертировать вашу базу данных в новый формат (.mdb → .accdb)
  • Искать весь проект для "Microsoft.Jet.OleDb.4.0" и заменить его на Microsoft.ACE.OLEDB.12.0