原文连接地址:https://blog.csdn.net/HW140701/article/details/71077579html
Win32编译环境下,用ADO数据库链接Access数据库通常都不会报错,可是最近因为项目上的须要,程序须要编译成64位以便申请到更多的使用内存空间,当把编译方式从Win32改成x64的时候,忽然出现了数据库链接出现未知错误,这时候就猜到了应该是编译环境的改变致使了数据库链接出错,在参考了其余大神的解决方案以后,终于解决了这个问题,个人环境为Win7 64+MFC(VS2010)+ADO+Access2007。数据库
参考连接以下:编程
http://blog.csdn.net/sundacheng1989/article/details/17925431ide
http://www.cnblogs.com/bluedoctor/p/3925871.htmlui
http://blog.csdn.net/kirawoo/article/details/39032387spa
http://blog.csdn.net/u010891996/article/details/12522911.net
解决方法:命令行
步骤1:去官网下载AccessDatabaseEngine_64.exe,下载连接code
https://www.microsoft.com/zh-cn/download/details.aspx?id=13255orm
或者直接去个人下载频道进行下载
http://download.csdn.net/detail/hw140701/9830665
骤2:这一个步骤是强制安装刚刚下载的AccessDatabaseEngine_64.exe,若是不强制安装的话,它会要求你卸载你所安装的所有的Office软件,那多麻烦!!!,因此选择忽略提醒,强制安装,
打开cmd.exe,在命令行输入“你的AccessDatabaseEngine_64.exe的存放路径” /passive,好比个人就是"F:\软件\我下载的\Windows数据库编程\AccessDatabaseEngine_64.exe" /passive强制安装,输完这个命令就等待安装完成。
步骤3:在安装完上述引擎以后,你须要修改一下你的代码,在win32编译环境下咱们的数据库的连接字符串是
m_connection.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s",databaseName);
若是你须要在x64的编译环境环境下链接Access数据库你须要修改成
m_connection.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s",databaseName);
为了更好的适配不一样的编译环境,我将个人代码修改成
1 //初始化COM,建立ADO链接对象实例 2 getsample_pConnection.CreateInstance(__uuidof(Connection)); 3 getsample_pRecordset.CreateInstance(__uuidof(Recordset)); 4 //构造数据库链接字符 5 CString m_connection; 6 #if defined _WIN64//若是是64位程序 7 m_connection.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s",databaseName); 8 #elif defined _WIN32//若是是32位程序 9 m_connection.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s",databaseName); 10 #endif 11 12 try 13 { 14 //使用Open方法链接数据库 15 getsample_pConnection->Open(_bstr_t(m_connection),"","",adModeUnknown); 16 //如下两行用来设置状态栏的提示信息 17 } 18 catch(_com_error e)//捕捉数据库打开过程当中的错误信息 19 { 20 21 CString tempErrorMessage; 22 tempErrorMessage.Format("数据库链接失败,错误缘由为:%s",e.ErrorMessage()); 23 AfxMessageBox(tempErrorMessage) 24 }
当是64位程序的时候就为
m_connection.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s",databaseName);
当是32位程序的时候就为
m_connection.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s",databaseName);
而后重启一下PC,应该就能够编译成功了。