[英]QMYSQL driver not loaded on Windows
我正在尝试在我的 Qt 应用程序中实现一个数据库系统。 为此,我尝试使用 MySQL(带有相关的QMYSQL
驱动程序)。 我的类连接函数写在下面。
假设connection
被定义为private
类成员:
private:
QSqlDatabase connection;
我们有以下几点:
database::database() : connection() {
this->connection.addDatabase("QMYSQL");
this->connection.setHostName(p.database->server_addr);
this->connection.setUserName(p.database->username);
this->connection.setPassword(p.database->password);
this->connection.setDatabaseName(p.database->database_name);
if (!connection.open())
this->error = this->connection.lastError().text();
else this->error = "";
}
我得到database::error
值Driver not loaded Driver not loaded
(是的,它写了两次)。 我在 Stack Overflow 上看到我必须将驱动程序库放在我的应用程序路径中。 我已经这样做了,但什么也没发生。 下面是我路径中的 Qt 库的屏幕截图。
编辑调用QSqlDatabase::drivers()
,我发现我有可用的驱动程序。 下面是输出( int 消息框的show-more部分)。
对于 mingw 和 Windows:从以下位置下载 C(不是 C++)连接器: https ://dev.mysql.com/downloads/connector/c/,然后将库:libmysql.dll 复制到文件夹:D:\\Qt\\ 5.5\\mingw492_32\\bin。 这应该可以解决未加载驱动程序的问题。
1) 我假设你已经编译了你的 qsqlmysql dll。 你应该有qmyssql.dll
中plugins/sqldrivers
相对目录到你的可执行的二进制文件的路径。
2) 您还应该注意不要混合发布和调试 dll(最后带有d
dll)。
3)静态方法addDatabase应该这样使用: this->connection = QSqlDatabase::addDatabase(DRIVER, NAME);
4)另一点:你得到“两次”错误的原因(你实际上只是得到两个错误的组合)是connection.lastError().text()
导致来自驱动程序和连接尝试的组合错误消息(附加) (有关差异的更多信息,请参阅 API)。
5)当我仔细查看你的库时,我看不到libmysql.dll
的非调试版本。 如果您在发布模式下运行,则必须使用发布库,因为运行时将查找libmysql.dll
而不是libmysqld.dll
。 这会给你这个错误。
除了@OnWhenReady的回答,我在qsqlmysql.dll
上运行DependencyWalker,发现缺少一些依赖。
IEShims.dll
我在我的路径中复制了它,现在它正在工作!
提示:为此类库运行 DependecyWalker,因为正如 Qt 文档中所写,QMYSQL 驱动程序库不会给出错误(不会显示它们)。
我使用 msys2 及其 qt5 包 mingw64/mingw-w64-x86_64-qt5 (5.8.0-3) 并查看 plugins/sqldrivers/qsqlmysql.dll 和Dependency Walker对 mariadb.dll 的依赖,所以我安装了mariadb 客户端包:
pacman -S mingw64/mingw-w64-x86_64-libmariadbclient
并且dll出现在/mingw64/bin/mariadb.dll中,所以我只是将dll复制到我的应用程序的exe文件旁边,它突然起作用了。
即使您不使用 msys2,您仍然应该使用 Dependency Walker 查看您的 qsqlmysql.dll 并将缺少的 dll 提供给您的应用程序。 您可以安装MariaDB或MySQL 连接器,只需从安装路径复制 dll。
我多次遇到这个问题。 如果你在
LINUX :您需要构建它。 您需要先安装 MySQL 服务器,然后从包管理器安装 MySQL 客户端。 然后按照 Qt 文档网站Here 中的说明进行操作。 这基本上是这些命令:
cd $QTDIR/qtbase/src/plugins/sqldrivers/mysql
make install
构建过程完成后,生成的插件将在$QTDIR/qtbase/src/plugins/sqldrivers/
我猜。
WINDOWS :无需构建。 安装 MySQL,然后你可以
此外,如果您已完成上述所有操作但仍无法正常工作,则需要安装 Visual C++ 运行时库。 我在 XP 中遇到了这个问题, Dependency Walker没有显示任何丢失或不兼容的 .dll 文件,在安装这些运行时库后,我的问题解决了。 在哪里可以找到它们包装好并准备好? 这里
在测试您的应用程序之前,最好重新启动,以便 PATH 和 ... 中的更改生效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.