我正在尝试在我的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()
后,我发现我有可用的驱动程序。下面是输出(在消息框的 show-more 部分中)。
答案 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。您可以安装MariaDB或MySQL 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之后,您可以
此外,如果您已完成上述所有操作但仍无法正常工作,则需要安装Visual C ++运行时库。我在XP中遇到了这个问题,Dependency Walker没有显示任何丢失或不兼容的.dll文件,在安装了这些运行时库之后,我的问题就解决了。在哪里可以找到它们并准备好打包? Here
在测试您的应用之前,重新启动它是一个好主意,这样PATH和...中的更改才能生效。