Windows上未加载QMYSQL驱动程序

时间:2014-06-14 15:28:49

标签: c++ mysql qt

我正在尝试在我的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库的屏幕截图。

enter image description here

修改 在致电QSqlDatabase::drivers()后,我发现我有可用的驱动程序。下面是输出(在消息框的 show-more 部分中)。

enter image description here

6 个答案:

答案 0 :(得分:6)

对于mingw和Windows:从https://dev.mysql.com/downloads/connector/c/下载C(而不是c ++)连接器, 然后将库:libmysql.dll复制到文件夹:D:\ Qt \ 5.5 \ mingw492_32 \ bin。 这应解决未加载驱动程序的问题。

答案 1 :(得分:3)

1)我假设你已经编译了你的qsqlmysql dll。相对于可执行文件的二进制路径,qmyssql.dll目录中应该有plugins/sqldrivers

2)你也应该注意不要混合发布和调试dll(最后的d)。

3)静态方法addDatabase应该以这种方式使用:this->connection = QSqlDatabase::addDatabase(DRIVER, NAME);

4)另一点:你得到错误的原因"两次" (实际上只是得到两个错误)是connection.lastError().text()导致驱动程序和连接尝试的组合错误消息(附加)(请参阅API有关差异的更多信息)。

5)当我仔细查看你的libs时,我看不到libmysql.dll的非调试版本。如果您在发布模式下运行,则必须使用发布库,因为运行时将查找libmysql.dll而不是libmysqld.dll。这会给你这个错误。

答案 2 :(得分:1)

@OnWhenReady's answer之外,我在qsqlmysql.dll上运行DependencyWalker,发现缺少某些依赖项。

IEShims.dll

我将它复制到我的路径中,现在它正在工作!

作为提示:为这种类运行DependecyWalker,因为,正如它在Qt文档中编写的那样,QMYSQL驱动程序库不会给出错误(赢了&#39 ;显示它们。)

答案 3 :(得分:1)

请参阅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安装了它)

答案 4 :(得分:1)

我使用msys2及其qt5软件包mingw64 / mingw-w64-x86_64-qt5(5.8.0-3),并查看插件/ sqldrivers / qsqlmysql.dll,其中Dependency Walker依赖于mariadb。 dll,所以我安装了mariadb客户端软件包:

pacman -S mingw64/mingw-w64-x86_64-libmariadbclient

并且dll出现在/mingw64/bin/mariadb.dll中,所以我只是复制了我的应用程序的exe文件旁边的dll,它突然起作用了。

即使你不使用msys2,你仍然应该使用Dependency Walker查看你的qsqlmysql.dll,并为你的应用程序提供缺少的dll。您可以安装MariaDBMySQL connectors,只需从已安装的路径中复制dll。

答案 5 :(得分:0)

我已经多次遇到此问题。如果您在

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文件,在安装了这些运行时库之后,我的问题就解决了。在哪里可以找到它们并准备好打包? Here

在测试您的应用之前,重新启动它是一个好主意,这样PATH和...中的更改才能生效。