QMYSQL le pilote n'est pas chargé sur Windows
Je suis en train de mettre en œuvre un système de base de données dans mon application Qt. Pour cela, je suis en train d'utiliser MySQL (avec les QMYSQL
pilote). Ma connexion à la classe-fonction est écrit ci-dessous.
En supposant que connection
est défini comme un private
membre de la classe:
private:
QSqlDatabase connection;
nous avons les éléments suivants:
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 = "";
}
- Je obtenir database::error
avec la valeur Driver not loaded Driver not loaded
(oui, c'est écrit deux fois). J'ai vu ici sur un Débordement de Pile que je dois mettre le pilote bibliothèques dans mon application pour le chemin d'accès. Je l'ai fait et rien ne s'est passé. Ci-dessous est une capture d'écran de l'intervalle Qt bibliothèques qui sont dans mon chemin.
MODIFIER
Après l'appel de QSqlDatabase::drivers()
, j'ai découvert que j'ai les pilotes disponibles. Ci-dessous est la sortie ( int la show-plus section de la boîte de message).
Vous devez vous connecter pour publier un commentaire.
Pour mingw et Windows: Télécharger le C (pas c++) connecteur: https://dev.mysql.com/downloads/connector/c/,
ensuite, copiez la bibliothèque: libmysql.dll, dans le dossier: D:\Qt\5.5\mingw492_32\bin.
Ceci devrait résoudre le problème de la non chargé pilote.
1) je suppose que vous avez déjà compilé votre qsqlmysql dll. Vous devriez avoir la
qmyssql.dll
dans leplugins/sqldrivers
répertoire par rapport à votre chemin d'accès binaire de votre exécutable.2) Vous devez également faire attention à ne pas mélanger les release et debug dll (celles avec la
d
à la fin).3) La méthode statique addDatabase devrait être utilisé de cette façon:
this->connection = QSqlDatabase::addDatabase(DRIVER, NAME);
4) un Autre point: La raison pour laquelle vous obtenez l'erreur "deux fois" (vous en fait tout simplement obtenir deux erreurs combinées), c'est que
connection.lastError().text()
résultats combinés message d'erreur (en annexe) à partir du pilote et de la tentative de connexion (voir l'API de plus en plus d'informations sur les différences).5) Quand j'ai pris un peu plus près à votre libs je ne pouvais pas voir le non-version de débogage de
libmysql.dll
. Si vous exécutez en mode release, vous devez utiliser la version de bibliothèque depuis le runtime regarder pourlibmysql.dll
et paslibmysqld.dll
. Cela vous donnera cette erreur./sqldrivers/
dossier (par rapport à mon .exe file). J'ai déménagé dans/plugins/sqldrivers/
et rien ne se passe... Voir mon edit s'il vous plaîtplugins/sqldrivers
il doit seulement être leqsqlmysql.dll
. Avez-vous compiler la lib par vous-même?libmysqld.dll
)En plus de @OnWhenReady réponse, je lance le DependencyWalker sur le
qsqlmysql.dll
et a constaté qu'il manquait certaines dépendances.J'ai copié dans mon chemin et maintenant ça fonctionne!
Comme une astuce: exécuter DependecyWalker pour ce genre de bibliothèques, parce que, comme il est écrit dans la Documentation de Qt, QMYSQL bibliothèques de pilotes ne donnera pas des erreurs (ne pas les montrer).
Veuillez voir le lien pour QT5:
http://seppemagiels.com/blog/create-mysql-driver-qt5-windows
=> qsqlmysql.dll et libmysql.dll (et libmysql.lib, si votre installation de MySQL a) sont nécessaires
Et le lien pour QT4:
http://seppemagiels.com/blog/create-mysql-driver-qt-windows
=> libqsqlmysql4.un et qsqlmysql4.dll et libmysql.dll (et libmysql.lib, si votre installation de MySQL a) sont nécessaires
- Je utiliser msys2 avec ses qt5 paquet mingw64/mingw-w64-x86_64-qt5 (5.8.0-3) et de regarder la plugins/sqldrivers/qsqlmysql.dll avec le Dependency Walker se délectait de la dépendance sur l'mariadb.dll, j'ai donc installé le mariadb package client:
et la dll est apparu dans /mingw64/bin/mariadb.dll alors j'ai juste copié les dll à côté de mon application fichier exe et soudain, elle a travaillé.
Même si vous n'utilisez pas msys2, vous devriez toujours regarder votre qsqlmysql.dll avec Dependency Walker et de fournir les dll manquantes de votre application. Vous pouvez installer MariaDB ou MySQL connecteurs et il suffit de copier les dll à partir de l'installation du chemin.