Qt程序连接Access数据库,出现 1、"[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 QODBC3: Unable to connect" 或者 2、"[Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配 QODBC3: Unable to connect"的错误的解决办法
1、"[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 QODBC3: Unable to connect" 或者 2、"[Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配 QODBC3: Unable to connect"的错误的解决办法)
系统环镜
电脑系统:windows 10 64位操作系统,基于X64的处理器
Qt版本:Qt Creator 4.15.2,基于 Qt 5.15.2 (MSVC 2019, 64 bit)
Access版本:Access 2013 64位
1、当出现"[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 QODBC3: Unable to connect"错误的解决办法
按快捷键“windows徽标+R”,出现如下运行窗口,输入odbcad32,【确定】,打印ODBC数据源管理程序。
出现如下界面,当选择“MS Access Database",右边的【删除】或者【配置】是可用的(不是灰色的),说明Access数据库驱动正常的,我刚开始安装了office 2007,然后打开ODBC数据源管理程序,平台下面显示的值是“32位”,当选择“MS Access Database"时,右边【删除】或者【配置】是灰色的,卸载office 2007后,重新安装office 2013 64位版后才正常
如果以上方法不能解决,可以到微软网站上下载Microsoft Access 2010 数据库引擎可再发行程序包,手动安装Access数据库数据库引擎,链接:https://www.microsoft.com/zh-cn/download/details.aspx?id=13255,一个是32位的数据库引擎,另一个是64位数据库引擎,根据需要选择下载!
- 如果你的电脑系统是64位的,并且你已经安装了32位的数据库引擎(如:AccessDatabaseEngine.exe),大概率会不正常,会出现:在ODBC数据源管理程序中选择“MS Access Database"时,再点击右边【删除】或者【配置】按钮(不是灰色,可以点击),会报错误,你再安装64位的数据库引擎(如:AccessDatabaseEngine_X64.exe),会提示你已经安装了32位数据库引擎,无法再安装64位的数据库引擎,解决方法:再次双击32位引擎AccessDatabaseEngine.exe,选择卸载(这个安装程序也可以用来卸载),直到完成;然后再安装64位的数据库引擎。
- 然后在Qt中加两条语句就能打开Access数据库
db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=D:\\Code\\DB.accdb")
如果到这一步还是没能解决问题,并且在ODBC数据源管理程序中选择“MS Access Database"时,右边【删除】或者【配置】能正常点击打开,那么看看是不是Qt用的编译器选择错了,检查一下编译器,我们用的是64位的数据库引擎,Qt的编译器也选择64位的,点击Qt左边栏的【项目】,切换到项目模式,可以看到MinGW 32-bit是粗体,说明选择了32位的编译器,如下图
- 点击MinGW 64-bit,选择64位的编译器,如图

我们也可以把Qt的默认编译器改一下,点击Qt的【工具】,【选项…】,选择MinGW 64-bit,点击【Make Default】,修改默认编译器
2、"[Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配 QODBC3: Unable to connect"的错误的解决办法
void setDatabaseName(const QString &name)方法能接受DSN或连接字符串,前面已经介绍过连接字符串,下面是DSN的代码
db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("accDB");
accDB就是DSN字符串,要想代码起作用,首先打印ODBC数据源管理程序,点【添加…】按钮,如下
选择第二个,Microsoft Access Driver (*.mdb, *.accdb),点击【完成】
点击【选择…】,选择一个Access数据库,添加一个accDB的用户数据源
如果你Qt编译器选择MinGW 32-bit, 就会报"[Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配 QODBC3: Unable to connect"的错误,改成64位编译器选择MinGW 64-bit,问题就能解决