最近趁着工作相对清闲,把电脑的操作系统重装了,由原来的XP换成了Win7(64位),结果遇到一系列的应用数据访问问题。
问题1:自己用VS2010编写的很多小程序在Win7下运行出现错误,经过核实,出错的环节都是访问Access数据库。
问题2:自己经常用的分析工具Knime,在读取Access数据库时提示出错(Knime是64位)。
为了解决上述问题,上网搜索了一番,初步弄清楚问题的原因。
因为我安装的Office2007是32位的(一般用户不推荐安装64位的Office,具体参考这篇文章:32位和64位版本的Office异同点),所以Office自带的Access访问驱动是32位的,而我的应用程序默认的编译方式是Any CPU,因此在64位系统默认访问64位的ODBC驱动,结果就找不到驱动。
解决方法1:对程序重新编译,目标平台选择x86就可以了,这个方法可以解决问题1,操作很简单。
存在问题:需要有程序的源代码,能够自己重新编译,因此对于问题2就无能为力了。
为了解决问题2,我又继续搜索解决方法,发现一个新的解决方式,那就是在Win7上安装64位的ODBC驱动。主要参考这篇文章:64位系统安装ODBC驱动的方法
要在Win7上安装64位的ODBC驱动,最简单的办法就是安装64位的Office,但我们前面已经安装了32位的Office,能不能不安装64位Office直接安装ODBC驱动?
方法也有,那就是安装Microsoft Access Engine,这个程序从微软官网下载下来叫AccessDatabaseEngine_x64.exe。
不过新的问题又来了,安装AccessDatabaseEngine_x64.exe时,程序也会检测提示你已安装了32位的Office,不能继续安装。
这个时候你需要对该程序的安装包动动小手术,先去微软下载一个Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1 ,下载下来的程序叫winsdk_web.exe。
安装winsdk_web.exe,然后从安装目录找到Orca.msi,具体的位置忘记了,可以搜索下。我们真正的目的就是要这个Orca,是一个MSI文件编辑器。运行Orca.msi安装。
接下来处理安装程序,先用Winrar把AccessDatabaseEngine_x64.exe解压缩,不能直接右键解压缩,要先运行Winrar,然后把AccessDatabaseEngine_x64.exe拖过去,就可以解压缩了,解完压缩有两个文件,其中一个是msi文件,叫AceRedist.msi,这时运行Orca程序,把AceRedist.msi打开,在左边Tables里面找到LaunchCondition项,然后在右边Condition里找到BLOCKINSTALLATION,把该条删除,然后保存。
接下来再运行AceRedist.msi,这回就不会提示已经安装了32位Office了,顺利安装结束,64位ODBC驱动就有了。
这次再运行Knime就没问题了,方法2的操作比较麻烦一些,不过用到的工具都是微软源生的,而且一次处理好,下次可以直接重用。
我把已弄好的 ACEREDIST.MSI 放在网盘了:
http://pan.baidu.com/s/1eS6zMro
关于Win7 64位系统通过ODBC访问Access的一点经验
原文地址:http://ericfu.blog.51cto.com/416760/1876729