Microsoft.ACE.OLEDB.12.0 Provider can no longer open .mdb under Windows 8

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-18 02:47:28

问题


I have an x64 application which uses Microsoft.ACE.OLEDB.12.0 provider to read an MS Access Database on Windows 7 (x64) and it works fine (Office 2010 installed).

The same application running under Windows 8 with Office 2013 installed, fails with a message saying that the provider cannot open previous versions.

Under Windows 8 with Office 2013 installed, there is also Microsoft.ACE.OLEDB.15.0, but I have double checked my code and certain that it is specifying the 12.0 in the connection string.

Are there different "versions" of this provider -or is there something I've missed?

I have recompiled a test program under Windows 8 for using x86 platform, and changed the provider to Microsoft.Jet.OLEDB.4.0 and it all works again. Unfortunately, the module is part of a bigger ecosystem that needs to be able to be run under x64 (specifically an plug in to excel), and the access database is downloaded by the suite from a supplier's web site by the application, so it is not practical to convert the database or change everything to x86.

Thanks in advance.


回答1:


It occurred to me to check the versions of files being used for each provider, and hunting through the registry, found that under a clean Windows 8 install, with Office 2013 installed, both providers point to the same assembly.

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

I then downloaded and ran the Microsoft Access Database Engine Redistributable (http://www.microsoft.com/en-us/download/details.aspx?id=13255) which then installed the proper version of the 12.0 provider into C:\Program Files\Common Files\microsoft shared\OFFICE14\ACEOLEDB.DLL and the application is behaving itself as expected.

It would seem strange that MS have included a provider branded as 12.0 that doesn't behave like 12.0 any more.

Anyway - hope that helps someone from 4-5 hours of hair pulling...

Craig




回答2:


The problem with installing the older ACE redistributable is that the next time you run Access in Office 2013, Office will "repair" itself and switch the pointer for version 12 back to the Office15 directory.




回答3:


I'm using Windows 8.1 64bit and Microsoft Office 2013 I Installed "Microsoft Access Database Engine 2010 Redistributable" but Nothing Changed and a got the same error BUT ! Installing the "2007 Office System Driver: Data Connectivity Components" solved the Problem.

I found this solution through this link.

trying to connect to an Access database in visual studio but keep getting this error?

try installing this first: http://www.microsoft.com/download/en/details.aspx?id=13255

however if, like me, that doesnt work for you, try the following method:

NOTE: this DOES work for office 2010 even though it is for 2007 office, dont ask me why it just does :)

  1. download and install this: http://www.microsoft.com/download/en/confirmation.aspx?id=23734

  2. in VS click add data source, follow the wizard and enjoy! :)




回答4:


Just to clarify the behavior described by OP:

With Office 2013 (ACE 15.0) Microsoft cancelled support for mdb-Files created with Jet 3.x and before (that is, Access 97 and earlier). I therefore strongly assume that the OP's database that caused the problem was an Access97-DB. Jet 4.0 databases (Access 2000, aslo .mdb) are still supported and will not produce any errors.

The fact that Office 2013 also registers its newer drivers as earlier versions is a deliberate attempt from MS to keep many programs and scripts working, that have a hard-coded provider name built in. As you recognized on your upgrade, this only keeps many working, not all...




回答5:


In addition, it seems the 32 bit version of the Redistributable works for Office 2013_64 bit on a 64bit Windows OS whereas the 64 bit version of the Redistributable didn't in my case




回答6:


  1. Install Microsoft Access Database Engine 2010 Redistributable x 64(http://www.microsoft.com/en-us/download/details.aspx?id=13255)
  2. convert Your data base to new format (.mdb -> .accdb)
  3. Search entire project for "Microsoft.Jet.OleDb.4.0" and replace it by Microsoft.ACE.OLEDB.12.0


来源:https://stackoverflow.com/questions/14562587/microsoft-ace-oledb-12-0-provider-can-no-longer-open-mdb-under-windows-8

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!