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

Win32编译环境下,用ADO数据库连接Access数据库一般都不会报错,但是最近由于项目上的需要,程序需要编译成64位以便申请到更多的使用内存空间,当把编译方式从Win32改为x64的时候,突然出现了数据库连接出现未知错误,这时候就猜到了应该是编译环境的改变导致了数据库连接出错,在参考了其他大神的解决方案之后,终于解决了这个问题,我的环境为Win7 64+MFC(VS2010)+ADO+Access2007。

    参考链接如下:

    http://blog.csdn.net/sundacheng1989/article/details/17925431

    http://www.cnblogs.com/bluedoctor/p/3925871.html

    http://blog.csdn.net/kirawoo/article/details/39032387

    http://blog.csdn.net/u010891996/article/details/12522911

 

解决方法:

步骤1:去官网下载AccessDatabaseEngine_64.exe,下载链接

https://www.microsoft.com/zh-cn/download/details.aspx?id=13255

或者直接去我的下载频道进行下载

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);

为了更好的适配不同的编译环境,我将我的代码修改为

 

//初始化COM,创建ADO连接对象实例 
	getsample_pConnection.CreateInstance(__uuidof(Connection));
	getsample_pRecordset.CreateInstance(__uuidof(Recordset));
	//构造数据库连接字符
	CString m_connection;
	#if defined _WIN64//如果是64位程序
	m_connection.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s",databaseName);
	#elif defined _WIN32//如果是32位程序
	m_connection.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s",databaseName);
	#endif
	
	try
	{	
		//使用Open方法连接数据库
		getsample_pConnection->Open(_bstr_t(m_connection),"","",adModeUnknown);
		//以下两行用来设置状态栏的提示信息 
	}
	catch(_com_error e)//捕捉数据库打开过程中的错误信息
	{
		
		CString tempErrorMessage;
		tempErrorMessage.Format("数据库连接失败,错误原因为:%s",e.ErrorMessage());
		AfxMessageBox(tempErrorMessage)
	}


当是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,应该就可以编译成功了。

 

如果您觉得这篇博文有用,请访问我的个人站:http://www.stubbornhuang.com,更多博文干货等着您。

 

   

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HW140701

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值