x64 win64编译环境下ADO连接Access数据库的问题解决

原文连接地址: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,应该就能够编译成功了。

相关文章
相关标签/搜索