MySqlTreiber erstellt, aber Qt "erkennt" ihn nicht

Alles rund um die Programmierung mit Qt
Antworten
blatlhupfa
Beiträge: 1
Registriert: 26. Oktober 2011 11:14

MySqlTreiber erstellt, aber Qt "erkennt" ihn nicht

Beitrag von blatlhupfa »

Hallo Community,

ich wollte heute, bzw gestern das sql-modul von Qt ausprobieren, und hab dazu mal gegoogelt was man machen muss.

Anleitung war schnell gefunden, aber irgentwie wird es nicht erkannt.

Also ich habe den mysqlserver von xampp genutzt.

dann folgende befehle:

D:\QTSDK\4.7.4>cd src/plugins/sqldrivers/mysql
D:\QTSDK\4.7.4\src\plugins\sqldrivers\mysql>qmake -o Makefile "INCLUDEPATH+=D:/xampp/mysql/include" "LIBS+=D:/xampp/mysql/lib/opt/libmysql.lib" mysql.pro
D:\QTSDK\4.7.4\src\plugins\sqldrivers\mysql>make
Ausgabe:
mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `D:/QTSDK/4.7.4/src/plugins/sqldrivers/mysql
'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -
DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -
DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_H
AVE_SSE2 -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\inclu
de\QtSql" -I"..\..\..\..\include" -I"d:\xampp\mysql\include" -I"..\..\..\..\incl
ude\ActiveQt" -I"debug" -I"..\..\..\..\mkspecs\win32-g++" -o debug\main.o main.c
pp
D:\QTSDK\4.7.4\bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_TO_ASCI
I -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -DQT_H
AVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREA
D_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtSql" -I"..\..\
..\..\include" -I"d:\xampp\mysql\include" -I"..\..\..\..\include\ActiveQt" -I"de
bug" -I"..\..\..\..\mkspecs\win32-g++" -D__GNUC__ -DWIN32 ..\..\..\sql\drivers\m
ysql\qsql_mysql.cpp -o debug\qsql_mysql.moc
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -
DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -
DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_H
AVE_SSE2 -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\inclu
de\QtSql" -I"..\..\..\..\include" -I"d:\xampp\mysql\include" -I"..\..\..\..\incl
ude\ActiveQt" -I"debug" -I"..\..\..\..\mkspecs\win32-g++" -o debug\qsql_mysql.o
..\..\..\sql\drivers\mysql\qsql_mysql.cpp
D:\QTSDK\4.7.4\bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_TO_ASCI
I -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -DQT_H
AVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREA
D_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtSql" -I"..\..\
..\..\include" -I"d:\xampp\mysql\include" -I"..\..\..\..\include\ActiveQt" -I"de
bug" -I"..\..\..\..\mkspecs\win32-g++" -D__GNUC__ -DWIN32 ..\..\..\sql\drivers\m
ysql\qsql_mysql.h -o debug\moc_qsql_mysql.cpp
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -
DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -
DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_H
AVE_SSE2 -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\inclu
de\QtSql" -I"..\..\..\..\include" -I"d:\xampp\mysql\include" -I"..\..\..\..\incl
ude\ActiveQt" -I"debug" -I"..\..\..\..\mkspecs\win32-g++" -o debug\moc_qsql_mysq
l.o debug\moc_qsql_mysql.cpp
windres -i qsqlmysqld_resource.rc -o debug\qsqlmysqld_resource_res.o --include-d
ir=. -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_AS
CII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNO
W -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT
g++ -mthreads -shared -Wl,--out-implib,debug\libqsqlmysqld4.a -o debug\qsqlmysql
d4.dll debug/main.o debug/qsql_mysql.o debug/moc_qsql_mysql.o -L"d:\QTSDK\4.7.4
\lib" debug\qsqlmysqld_resource_res.o D:/xampp/mysql/lib/opt/libmysql.lib -lQtSq
ld4 -lQtCored4
Creating library file: debug\libqsqlmysqld4.a
mingw32-make[1]: Leaving directory `D:/QTSDK/4.7.4/src/plugins/sqldrivers/mysql'
Nach dem erfolgreichen erstellen der Bibliothek (Debug) hab ich die Dateien libqsqlmysqld4.a und qsqlmysqld4.dll in den Pluginordner kopiert (herausgefunden mit QCoreApplication::libraryPaths ) unter sqldrivers/, aber wenn ich jetzt mit dem QtCreator die Treiber liste, kommt QMYSQL nicht.

folgender code liefert folgende ausgabe:

Code: Alles auswählen

#include <QCoreApplication>
#include <QtSql>
int main(int argc, char ** argv){
        QCoreApplication app( argc, argv );
        qDebug() << QSqlDatabase::drivers();
        QSqlDatabase db( QSqlDatabase::addDatabase( "QMYSQL" ) );
        qDebug() << db.lastError();
}
Starte D:\QtProjects\PluginManager-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK__Debug\debug\PluginManager.exe...
("QSQLITE", "QODBC3", "QODBC")
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC
QSqlError(-1, "Driver not loaded", "Driver not loaded")
D:\QtProjects\PluginManager-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK__Debug\debug\PluginManager.exe beendet, Rückgabewert 0
Meine .pro datei:

Code: Alles auswählen

SOURCES += \
    main.cpp
QT += sql


Habe ich in der .pro was vergessen?
Im Quellcode?
Hat es was mit zu tun das ich Xampp "missbraucht" habe?
Habe ich einstellungen vergessen in der qt bibliothek?

Ich hoffe ihr könnt mir helfen und bedanke mich im Vorraus.

lg
David
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: MySqlTreiber erstellt, aber Qt "erkennt" ihn nicht

Beitrag von solarix »

Bisher scheinst du ja alles richtig gemacht zu haben (wichtig: Debug-Applikation benötigt Debug-Qt-Plugin). Ich vermute (programmiere fast nur noch unter Linux), dass sich hinter "D:/xampp/mysql/lib/opt/libmysql.lib" nur das Interface zu einer DLL befindet, welche sich ebenfalls im Suchpfad der Applikation befinden muss.

Beim Deployment sähe das z.B. wie folgt aus:

Code: Alles auswählen

AppBaseDir/
+- app.exe
+- andere DLLs (z.B. qsql4.dll)
+- sqldrivers/
    +- qsqlmysql.dll
+- libmysql.dll       (wird von qsqlmysql.dll benötigt)
Ein Tipp wäre daher: hast du auf die "libmysql.dll" geachtet? Die muss direkt bei der Applikation oder sonst irgendwo im Suchpfad des Betriebssystems liegen. Falls du sicher gehen möchtest, ob und welche DLL fehlt, lade dir den "Dependency Walker" runter und öffne damit das Qt-Plugin(!). Wenn dieses noch fehlende Verweise hat, wird dir das der DW sagen..

hth!
ceumern
Beiträge: 28
Registriert: 16. September 2011 11:25

Re: MySqlTreiber erstellt, aber Qt "erkennt" ihn nicht

Beitrag von ceumern »

Ich glaube du hast beim erstellen des Plugins ein "make install" vergessen.

Das Plugin muss im folgenden Pfad liegen: <QT_DIR>\plugins\sqldrivers

Ausserdem scheinst du nur debug gebaut zu haben. Versuch mal "make all" bzw. "make release".
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Re: MySqlTreiber erstellt, aber Qt "erkennt" ihn nicht

Beitrag von Troll.Soft »

moin,
sieht aus, als würdest Du Windows benutzen :)
Tipp: Wenn du nur mal ein paar Sql-Befehle testen willst, einfach sqlite nehmen. Das ist in Qt direkt eingebaut und macht am wenigsten Probleme.

Unter Windows programmiere ich mit VC2010 im Debug-Modus und arbeite mit Dll's.
Dazu muß ich die Qt-Sourcen einmal einrichten und compilieren.

etwa so

gehe auf die DOS-Konsole von VC2010
QTDIR etc müssen gesetzt sein

mit dem configure von Qt und den angegebenen Parametern bereitest Du das System vor.

configure -shared -no-qt3support -debug -opensource -qt-sql-mysql -qt-sql-sqlite -qt-sql-odbc -I X:\...mysql...\include -L X:\...mysql...\lib

!!! Achtung: dauert lange

...mysql... durch die Quellen und libs Deiner mysql-version ersetzen

-platform <win32-msvc2010> ... The operating system and compiler you are building on. (default %QMAKESPEC%)
-shared ............ Create and use shared Qt libraries.
-no-qt3support ... Disables the Qt 3 support functionality.
-debug ............. Compile and link Qt with debugging turned on.
-opensource ........ Compile and link the Open-Source Edition of Qt.
-qt-sql-mysql ... Enable a SQL <driver> in the Qt Library.
-qt-sql-sqlite ... s.o.
-qt-sql-odbc ... s.o.
-qt-zlib ........... Use the zlib bundled with Qt.
-qt-gif ............ Compile the plugin for GIF reading support. See also src/plugins/imageformats/gif/qgifhandler.h
-qt-libpng ......... Use the libpng bundled with Qt.
-qt-libmng ......... Use the libmng bundled with Qt.
-qt-libtiff ........ Use the libtiff bundled with Qt.
-qt-libjpeg ........ Use the libjpeg bundled with Qt.
-I ... Bindet includes ein
-L ... Bindet libs ein

mit nmake von VC2010 wird alles kompiliert

!!! Achtung: dauert ewig lange

viel Spaß

Troll.Soft
Antworten