Поставщик 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.
Заранее спасибо.
6 ответов
Мне пришло в голову проверить версии файлов, используемых для каждого провайдера, и, просматривая реестр, обнаружил, что при чистой установке Windows 8 с установленным Office 2013 оба провайдера указывают на одну и ту же сборку.
(C: \ Program Files \ Common Files \ microsoft shared \ OFFICE15 \ ACEOLEDB.DLL)
Затем я скачал и запустил распространяемый компонент Microsoft Access Database Engine ( 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
Проблема с установкой более ранней распространяемой версии ACE заключается в том, что при следующем запуске Access в Office 2013 Office будет "восстанавливать" себя и переключать указатель для версии 12 обратно в каталог Office15.
Я использую Windows 8.1 64bit и Microsoft Office 2013 Я установил "Microsoft Access Database Engine 2010 Reistributable", но ничего не изменилось и получил ту же ошибку, НО! Установка "Драйвер системы Office 2007: компоненты для подключения к данным" решила проблему.
Я нашел это решение по этой ссылке.
пытаясь подключиться к базе данных Access в Visual Studio, но продолжаете получать эту ошибку?
попробуйте сначала установить это: http://www.microsoft.com/download/en/details.aspx?id=13255
Однако, если, как и я, это не работает для вас, попробуйте следующий метод:
ПРИМЕЧАНИЕ: это работает для офиса 2010, даже если это для офиса 2007 года, не спрашивайте меня, почему это просто работает:)
Загрузите и установите это: http://www.microsoft.com/download/en/confirmation.aspx?id=23734
в VS нажмите кнопку Добавить источник данных, следуйте указаниям мастера и наслаждайтесь!:)
Просто чтобы прояснить поведение, описанное ОП:
В Office 2013 (ACE 15.0) Microsoft отменила поддержку mdb-файлов, созданных в Jet 3.x и более ранних версиях (то есть Access 97 и более ранних версиях). Поэтому я настоятельно предполагаю, что база данных OP, которая вызвала проблему, была Access97-DB. Базы данных Jet 4.0 (Access 2000, также.mdb) по-прежнему поддерживаются и не выдают никаких ошибок.
Тот факт, что Office 2013 также регистрирует свои новые драйверы в качестве более ранних версий, является намеренной попыткой MS сохранить работоспособность многих программ и сценариев со встроенным жестко заданным именем поставщика. Как вы узнали при обновлении, это только позволяет многим работать не все...
- Установите 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
Кроме того, кажется, что 32-разрядная версия распространяемого пакета работает для Office 2013_64 bit в 64-разрядной ОС Windows, тогда как 64-разрядная версия распространяемого пакета не работает в моем случае.