Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 596
Craig D Avatar asked Jan 28 '13 12:01

Craig D


2 Answers

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...

like image 114
Stefan Avatar answered Sep 21 '22 15:09

Stefan


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

like image 32
Craig D Avatar answered Sep 21 '22 15:09

Craig D