繁体   English   中英

Windows 上未加载 QMYSQL 驱动程序

[英]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::errorDriver 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.dllplugins/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 驱动程序库不会给出错误(不会显示它们)。

请参阅 QT5 的链接: http ://seppemagiels.com/blog/create-mysql-driver-qt5-windows => qsqlmysql.dll 和 libmysql.dll(和 libmysql.lib,如果您的 MySQL 安装有它)是需要

QT4 的链接: http ://seppemagiels.com/blog/create-mysql-driver-qt-windows => libqsqlmysql4.a 和 qsqlmysql4.dll 和 libmysql.dll(和 libmysql.lib,如果你的 MySQL 安装有它)是需要的

我使用 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 提供给您的应用程序。 您可以安装MariaDBMySQL 连接器,只需从安装路径复制 dll。

我多次遇到这个问题。 如果你在

LINUX :您需要构建它。 您需要先安装 MySQL 服务器,然后从包管理器安装 MySQL 客户端。 然后按照 Qt 文档网站Here 中的说明进行操作。 这基本上是这些命令:

cd $QTDIR/qtbase/src/plugins/sqldrivers/mysql
make install

构建过程完成后,生成的插件将在$QTDIR/qtbase/src/plugins/sqldrivers/我猜。

WINDOWS :无需构建。 安装 MySQL,然后你可以

  1. 安装 MySQL Connector C(.msi 文件)并将安装目标文件夹添加到 PATH。
  2. 或下载 zip 文件并将其解压缩到您的应用程序可以找到的某个位置。

此外,如果您已完成上述所有操作但仍无法正常工作,则需要安装 Visual C++ 运行时库。 我在 XP 中遇到了这个问题, Dependency Walker没有显示任何丢失或不兼容的 .dll 文件,在安装这些运行时库后,我的问题解决了。 在哪里可以找到它们包装好并准备好? 这里

在测试您的应用程序之前,最好重新启动,以便 PATH 和 ... 中的更改生效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM