问题记录:MFC使用ADO在32位和64位下分别连接ACCESS数据库碰到的问题

题外话:近期收到个任务,给合作的公司弄一个静态库,库的功能需要加载文件夹中的ACCESS数据库,合作方希望同时有32位的 和 64位的。

进入正题把,首先声明,我的ACCESS数据库文件后缀是.mdb的

在x86下导入msado15.dll,我是这样写的

#import "C:\Program Files\Common Files\System\ado\msado15.dll" \
no_namespace \
rename("EOF","adoEOF") rename("DataTypeEnum","adoDataTypeEnum") \
rename("FieldAttributeEnum", "adoFielAttributeEnum") rename("EditModeEnum", "adoEditModeEnum") \
rename("LockTypeEnum", "adoLockTypeEnum") rename("RecordStatusEnum", "adoRecordStatusEnum") \
rename("ParameterDirectionEnum", "adoParameterDirectionEnum")

我按网上说的#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF") 这样写编译出好多错误

然后在x64下导入msado15.dll,如下

#import "C:\Program Files (x86)\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")  

然后重点就是打开数据库的操作,就是这里折腾了好久,网上搜到的有说是Provider=Microsoft.Jet.OLEDB.4.0这种是打开.mdb的;Provider=Microsoft.ACE.OLEDB.12.0这种是打开.accdb的,但是我发现行不通

实际的操作如下所示:

#if defined _WIN64//如果是64位程序
			strConnect.Format(L"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s;", strPath); // 
#elif defined _WIN32//如果是32位程序
			strConnect.Format(L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;", strPath);  //
#endif	

x64下打开.mdb数据库也是用的Provider=Microsoft.ACE.OLEDB.12.0;

对了,在执行打开数据库操作前还有重要的步骤要做,就是安装对应的ACCESS环境,

x86下安装

AccessDatabaseEngine.exe

x64下安装

AccessDatabaseEngine_X64.exe

具体的资源网上搜把,我上传显示资源已存在了

切记!!!!  x86下就对应x86的环境,,,x64下对应x64的环境,,不能搞乱了,不然打开数据库会报错

成功打开数据库之后的SQL操作这里不再赘述了

        记录下:2022 10 10

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值