1

MySQLドライバーを正常にコンパイルしましたが、Qtに強制的にロードさせることはできません。

最初に言わなければならないことは、IvはパッケージにODBCおよびSQLiteドライバーを(Qtをインストールした後)取得しましたが、それらも検出されません。

* C:\ Qt \ 4.8.0 \ plugins \ sqldrivers *でIvは次のようになりました:

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

応用\

APPLICATION \ Debug \

APPLICATION \ Release \

APPLICATION \ sqldrivers \

もちろん、IvはQtSql*.dllも配置しています。

Ivは.proを適切に構成しました:

QT+=コア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()は空です。私が間違っているのは何ですか?C:\ Qt \ 4.8.0 \ plugins\sqldriversのどのドライバーもQtに表示されません。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:\APPLICATION\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 に答える