1

我已经成功编译了 MySQL 驱动程序,但我无法强制 Qt 加载它们。

一开始应该说什么 Iv 得到了 ODBC 和 SQLite 驱动程序包(在安装 Qt 之后),它们也没有被检测到。

在 *C:\Qt\4.8.0\plugins\sqldrivers* 我得到:

qsqlite4.dll

qsqlite4.lib

qsqlited4.dll

qsqlited4.lib

qsqlmysql4.dll

qsqlmysql4.lib

qsqlmysqld4.dll

qsqlmysqld4.lib

qsqlodbc4.dll

qsqlodbc4.lib

qsqlodbcd4.dll

qsqlodbcd4.lib

qsqlpsql4.dll

qsqlpsql4.lib

qsqlpsqld4.dll

qsqlpsqld4.lib

我还放入的 qsqlmysql*.* 文件:

C:\Qt\4.8.0\bin

应用\

应用\调试\

应用\发布\

应用程序\sqldrivers\

当然,我也得到了 QtSql*.dll。

Iv 正确配置了 .pro:

QT += core gui 网络 sql

我正在运行这段代码:

#include <QSqlRecord>
#include <QSqlError>

QLibrary mysqllib("qsqlmysqld4.dll");
mysqllib.load();
auto t1 = mysqllib.isLoaded();
qDebug()<<"my library loaded"<<mysqllib.isLoaded();

QPluginLoader plug("qsqlmysqld4.dll");
plug.load();
auto t2 = plug.isLoaded();
qDebug()<<"mysql plugin is loaded"<<plug.isLoaded();

ui->textEditContent->append( "--SQL DRIVERS SUPPORTED:--\n" );
FOREACH( auto driver, QSqlDatabase::drivers() )
    ui->textEditContent->append( "  " + driver + "\n" );

QLibrary 和 QPluginLoader 返回 true。而 QSqlDatabase::drivers() 是空的。我做错了什么?Qt 看不到 C:\Qt\4.8.0\plugins\sqldrivers 中的所有驱动程序。Iv 使用相同的编译器 (MSVC2010) 编译 Qt 和 SQL 驱动程序,没有错误。我正在运行我的代码几个月。任务是添加 MySQL 支持。

4

2 回答 2

3

问题解决了!我修改了代码,现在看起来像这样:

#include <QSqlRecord>
#include <QSqlError>    

QStringList liblist;
liblist.push_back("c:/Qt/4.8.0/plugins/");
liblist.push_back("c:/Qt/4.8.0/bin/");
QCoreApplication::setLibraryPaths(liblist);

QLibrary mysqllib("qsqlmysqld4.dll");
mysqllib.load();
auto t1 = mysqllib.isLoaded();
qDebug()<<"my library loaded"<<mysqllib.isLoaded();

QPluginLoader plug("qsqlmysqld4.dll");
plug.load();
auto t2 = plug.isLoaded();
qDebug()<<"mysql plugin is loaded"<<plug.isLoaded();

ui->textEditContent->append( "--SQL DRIVERS SUPPORTED:--\n" );
FOREACH( auto driver, QSqlDatabase::drivers() )
    ui->textEditContent->append( "  " + driver + "\n" );

似乎即使 Qt 有指向它自己的文件夹的路径,您也需要在加载驱动程序之前指定它们。您可以通过添加这些行来做到这一点:

QStringList liblist;
liblist.push_back("c:/Qt/4.8.0/plugins/");
liblist.push_back("c:/Qt/4.8.0/bin/");
QCoreApplication::setLibraryPaths(liblist);

如果您想像我一样将这些驱动程序包含到您的应用程序文件夹中,您可以在应用程序的根目录中创建文件夹“sqldrivers”并将路径添加到该根目录。所以我们有 libmysql.dll 和 qsqlmysql.dll 在:

X:\应用程序\sqldrivers\

代码如下所示:

QStringList liblist;
liblist.push_back(QDir::currentPath()); // Qt always looks for those drivers in <LIB_FOLDER_SPECIFIED>/sqldrivers/
//liblist.push_back("e:/Qt/4.8.0/bin/");
//liblist.push_back("e:/Qt/4.8.0/plugins/");
QCoreApplication::setLibraryPaths(liblist);
于 2013-01-17T09:59:50.700 回答
0

你还需要一个 libmysql.dll

C:\Qt\4.8.0\bin

APPLICATION\

APPLICATION\Debug\

APPLICATION\Release\
于 2013-01-16T16:50:19.317 回答