Microsoft.ACE.OLEDB.12.0提供程序无法再在Windows 8下打开.mdb

Cra*_*g D 12 oledb 64-bit ms-access windows-8 office-2013

我有一个x64应用程序,它使用Microsoft.ACE.OLEDB.12.0提供程序在Windows 7(x64)上读取MS Access数据库,它工作正常(安装了Office 2010).

在安装了Office 2013的Windows 8下运行的同一应用程序失败,并显示一条消息,指出提供程序无法打开以前的版本.

在安装了Office 2013的Windows 8下,还有Microsoft.ACE.OLEDB.15.0,但我已经仔细检查了我的代码并确定它在连接字符串中指定了12.0.

这个提供商有不同的"版本" - 或者有什么我错过了吗?

我已经在Windows 8下重新编译了一个使用x86平台的测试程序,并将提供程序更改为Microsoft.Jet.OLEDB.4.0并且它再次运行.不幸的是,该模块是一个更大的生态系统的一部分,需要能够在x64下运行(特别是插入到excel),并且该套件通过应用程序从供应商的网站下载访问数据库,因此它是转换数据库或将所有内容更改为x86不切实际.

提前致谢.

Cra*_*g D 16

我想到检查每个提供程序使用的文件版本,并通过注册表进行搜索,发现在干净的Windows 8安装下,安装了Office 2013,两个提供程序都指向同一个程序集.

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

然后我下载并运行Microsoft Access数据库引擎可再发行组件(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小时拔毛的人......

克雷格


小智 5

安装旧的ACE可再发行组件的问题是,下次在Office 2013中运行Access时,Office将"修复"自身并将版本12的指针切换回Office15目录.

  • 欢迎来到SO.为了将来参考,您可能会认为这个答案更适合作为评论,所以当您获得更多积分时,请记住这一点,以避免被低估. (2认同)