vs2008+Qt+MySql环境搭建及提示"Driver not load"的原因分析

本文介绍如何在Visual Studio 2008中整合Qt与MySQL,包括安装必要的软件、编译MySQL驱动及解决“Driver not load”问题的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于vs编程助手(VAssistX)和联合编译(IncrediBuild)这两个究级强大的软件,ms的ide一直是世界上最傻瓜和最强大的ide。

1、下载并安装qt-win-opensource-4.6.2-vs2008.exe,注意要是windows版的

2、下载并安装qt-vsintegration-1.4.3.exe,有了这个插件,用vs2008编写qt简直和qt creator一样方便(甚至更方便)。

3、安装MySql5.1,至少要是4以上的版本(3的话,编译驱动时还要修改源代码)。安装时要安装include和lib。

4、编译MySql驱动。

    关于这一点要好好说说,qt作为开源软件,由于版权问题,没有提供所有数据库的驱动。而这个驱动可以理解为发动机,由于这个驱动的存在,上层可以提供统一的接口(一样的方向盘,油门),而不用关心具体的数据库类型。

    关于增加QT对MySql的支持,可以通过修改配置(命令行 -qt-sql-mysql)并重新编译QT来实现(不推荐,耗时太长)。也可以以插件的形式来实现,而这就需要自己编译mysql的驱动。

    编译驱动的方法:

    a、通过vs2008的命令行(只要能识别qmake、nmake的命令就行)进入到QTDIR/src/plugins/sqldrivers/mysql  目录下。

    b、运行命令:

    qmake -o Makefile INCLUDEPATH+="D:/MySQL5/include" LIBS+="D:/MySQL5/lib/opt/libmysql.lib" mysql.pro

    nmake

    其中D:/MySQL5为mysql的安装目录

    好了,至此准备工作完成。

 

 

 

    以上这些网上铺天盖地到处都是,我照着弄完,运行程序时还是提示"Driver not load",我编译了两次qt,编译了n此驱动都是如此。后来耐着心思,断点跟踪了一下源码发现,原来是LoadLibrary时失败,造成QT认为编译出的qsqlmysql4.dll不是一个合法插件。原因非常白痴:mysql的libmysql.dll不在环境变量PATH中的目录下,造成驱动加载时,找不到这个dll文件。把它拷贝到程序运行目录(或者任何一个确认可以被程序找到的文件夹下)就ok了。

<think>我们正在解决Qt连接MySQL时出现的"QMYSQLdrivernotloaded"错误。根据引用内容,此错误通常是由于MySQL驱动问题引起的,特别是Qt版本与MySQL版本不匹配(如32位/64位不一致)或缺少必要的DLL文件。用户需求:在VS工程中使用Qt连接MySQL并解决该错误。解决方案步骤(结合引用和常见解决方法):1.确认Qt编译器和MySQL的位数匹配:确保Qt编译器(如mingw81_32是32位)与MySQL(如64位)的位数一致。如果不一致,需要下载对应位数的MySQL。2.编译QtMySQL驱动:-找到Qt源码中的mysql驱动项目(例如:Qt\版本\Src\qtbase\src\plugins\sqldrivers\mysql)-使用QtCreator打开mysql.pro项目,进行编译(注意:需要安装MySQL的C语言连接库,如MySQLConnector/C)-编译生成的驱动文件(qsqlmysql.dll,qsqlmysqld.dll)将放在plugins\sqldrivers目录下3.将编译好的驱动文件复制到Qt的驱动目录(如:Qt\版本\plugins\sqldrivers)4.MySQL的DLL文件(如libmysql.dll,对于MySQL8可能还需要libcrypto-3-x64.dll和libssl-3-x64.dll等)复制到Qt的驱动目录或应用程序的exe所在目录。5.VS工程中,确保正确配置Qt环境,并在代码中加载驱动。详细步骤:步骤1:检查位数匹配-如果Qt是32位的,则MySQL也必须是32位,并且使用32位的MySQLConnector/C库。64位同理。步骤2:编译MySQL驱动-下载MySQLConnector/C(与MySQL服务器版本匹配,且位数与Qt编译器一致)-打开Qt命令行(如Qt5.14.2MinGW32-bit),进入mysql驱动源码目录:cdC:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql-执行qmake,指定MySQLinclude和lib路径(根据你的安装路径调整):qmake"INCLUDEPATH+=C:\mysql-connector-c-6.1.11-win32\include""LIBS+=C:\mysql-connector-c-6.1.11-win32\lib\libmysql.lib"-oMakefilemysql.pro-执行make(或nmake,如果使用MSVC)进行编译步骤3:复制驱动-编译后,在mysql驱动目录的release文件夹下会生成qsqlmysql.dll和qsqlmysqld.dll(debug版本在debug文件夹),将它们复制到Qt的驱动目录(如:C:\Qt\Qt5.14.2\5.14.2\mingw73_32\plugins\sqldrivers)步骤4:复制MySQL的DLL-将MySQLConnector/C的bin目录下的libmysql.dll(以及MySQL8需要的libcrypto-3-x64.dll和libssl-3-x64.dll等,注意位数)复制到:-应用程序的exe所在目录(VS工程生成的可执行文件目录)-或者Qt的驱动目录(同上)步骤5:在VS工程中配置-在VS中配置Qt插件路径:通过设置环境变量QT_PLUGIN_PATH,或者在代码中通过QCoreApplication::addLibraryPath()添加插件路径。-代码中加载驱动:QSqlDatabasedb=QSqlDatabase::addDatabase("QMYSQL");db.setHostName("localhost");db.setUserName("root");db.setPassword("password");db.setDatabaseName("test");if(!db.open()){qDebug()<<"Error:"<<db.lastError().text();}注意:如果使用MSVC编译器,步骤2需要使用nmake,并且确保MySQLConnector/C的库文件是.lib格式(如果是.dll,需要对应的导入库.lib)。引用中提到的注意事项:-不同Qt版本可能需要不同的驱动,因此需要根据Qt版本重新编译驱动。-对于MySQL8,需要额外的DLL(libcrypto和libssl)[^5]。如果上述步骤后仍出现错误,请检查:-使用db.lastError().text()获取详细错误信息。-使用QCoreApplication::libraryPaths()查看插件搜索路径,确保驱动目录在其中。-使用QSqlDatabase::drivers()查看已加载的驱动,确认QMYSQL是否存在。如果驱动不存在,可能是驱动没有正确放置或依赖的DLL没有找到。可以使用DependencyWalker工具查看qsqlmysql.dll的依赖是否满足。最后,在VS工程中,确保在运行程序时,所有必要的DLL(包括Qt的DLL和MySQL的DLL)都在可执行文件的目录或系统PATH中。希望这些步骤能帮助您解决问题。</think>### 解决VS工程中Qt连接MySQL的"QMYSQL driver not loaded"错误 #### 错误原因分析 该错误通常由三个核心问题导致: 1. **驱动未编译**:Qt默认不包含MySQL驱动,需手动编译 2. **位数不匹配**:Qt编译器位数(32/64位)与MySQL库位数不一致 3. **依赖库缺失**:缺少MySQL的运行时依赖库(libmysql.dll等) --- #### 解决方案(基于VS工程环境) ##### 步骤1:确认环境版本 ```bash # 检查Qt编译器位数 Qt Creator → 工具 → 选项 → Kits → 编译器类型 (MSVC2019 64bit等) # 检查MySQL位数 mysql --version # 输出应包含"x86_64"(64位)或"x86"(32位) ``` ##### 步骤2:编译MySQL驱动 1. **安装MySQL Connector/C** - 下载地址:[MySQL Connector/C](https://dev.mysql.com/downloads/connector/c/) - 选择与Qt编译器**相同位数**的版本(如Qt是32位则选32位Connector) 2. **使用Qt命令行编译驱动** ```bash # 打开Qt命令行(匹配VS使用的编译器版本) cd %QT_DIR%\Src\qtbase\src\plugins\sqldrivers # 生成Makefile(替换实际路径) qmake -- MYSQL_INCDIR="C:/mysql-connector-c/include" MYSQL_LIBDIR="C:/mysql-connector-c/lib" "LIBS+=-llibmysql.lib" # 编译驱动 nmake # 或 mingw32-make 若使用MinGW ``` 编译成功后,在`plugins/sqldrivers`目录生成: - `qsqlmysql.dll` (Release版) - `qsqlmysqld.dll` (Debug版) ##### 步骤3:部署驱动文件 1. 将生成的dll复制到Qt插件目录: ``` %QT_DIR%\plugins\sqldrivers ``` 2. **必须**将以下文件放入**EXE输出目录**(Debug/Release文件夹): - `qsqlmysql.dll` / `qsqlmysqld.dll` - MySQL Connector/C中的`libmysql.dll` - MySQL 8额外需要:[^5] - `libcrypto-3-x64.dll` - `libssl-3-x64.dll` ##### 步骤4:代码配置(VS工程中) ```cpp #include <QSqlDatabase> // 在main()中初始化 int main(int argc, char *argv[]) { QApplication app(argc, argv); // 检查驱动是否存在 qDebug() << "Available drivers:" << QSqlDatabase::drivers(); // 加载MySQL驱动 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setPort(3306); db.setDatabaseName("your_db"); db.setUserName("root"); db.setPassword("your_pwd"); if (!db.open()) { qCritical() << "Connection error:" << db.lastError().text(); } else { qDebug() << "Connected!"; } return app.exec(); } ``` ##### 步骤5:环境变量配置(可选) 若仍报错,在VS工程属性中添加: ``` 调试 → 环境:PATH=%PATH%;C:\mysql-connector-c\bin ``` --- #### 关键注意事项 1. **位数一致性**:Qt编译器、MySQL Connector/C、MySQL Server三者必须同为32位或64位[^2][^4] 2. **MySQL 8特殊要求**:必须部署`libcrypto`和`libssl`的DLL[^5] 3. **驱动放置位置**:驱动DLL必须位于: - EXE输出目录 - 或通过`QCoreApplication::addLibraryPath()`添加的路径 4. **连接测试**:先用命令行工具测试MySQL连通性: ```bash mysql -u root -p -h 127.0.0.1 ``` --- #### 验证成功的标志 1. 控制台输出包含`QMYSQL` ```bash Available drivers: ("QSQLITE", "QMYSQL") ``` 2. 数据库连接返回`Connected!` 3. 执行SQL查询无报错 > 若遵循上述步骤仍有问题,请检查防火墙设置和MySQL用户远程访问权限[^1]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值