Seite 1 von 1

Mysql Treiber können auf der Entwicklungsumgebung ...

Verfasst: 17. Januar 2013 12:32
von binio
... eingebunden werden.
qDebug() << QSqlDatabase::drivers();

Code: Alles auswählen

("QSQLITE", "QMYSQL3", "QMYSQL", "QODBC3", "QODBC")
Ich habe auf der Entwicklungsumgebung beim kompilieren "C:\QtSDK\Desktop\Qt\4.8.1\mingw\bin\qmake.exe" angegeben.
Ich besitze die Dateien:
  • libmySQL.dll
    libqsqlmysqld4.a
    qsqlmysqld4.dll
die ich einmal(Wochenlanges rumprobieren, kennt sicher ein und der andere schon) erfolgreich erstellt habe. Diese kann ich auf der Entwichlungsumgebung wunderbar nutzen.
Jetzt möchte ich jedoch meine erstelle "xyz.exe" aus dem Verzeichnis "xyz-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK__Debug" auf einem anderen PC nutzen.

Problemkinder wie:
  • libgcc_s_dw2-1.dll
    mingwm10.dll
    QtGuid4.dll
    QtSqld4.dll
    QtCored4.dll
habe ich schon in das exe Verzeichnis kopiert damit die Anwendung (Mein Projekt) überhaupt startet.
Jetzt habe ich aber ein schrecken bekommen als er meint
"Driver not loaded"
Darauf habe ich einfach mal experimentiert und die:
  • libmySQL.dll
    libqsqlmysqld4.a
    qsqlmysqld4.dll
in das windows (system, system32,exepfad,...) verzeichnis kopiert. Jedoch hat nichts davon geholfen.
Kann mir da jemand evtl. weiterhelfen ? Ich denke ich bin dem Ziel sehr nah...

Re: Mysql Treiber können auf der Entwicklungsumgebung ...

Verfasst: 17. Januar 2013 13:56
von odt
Hallo Binio

Verwendest Du bewusst die "Debug"-Version? Normalerweise sollte der "Release" deployt werden.
Sollten die Qt-Db-Driver nicht ins Plugin- resp. sqldrivers-Verzeichnis?

http://qt-project.org/doc/qt-5.0/qtsql/ ... leshooting

Viele Grüsse
Reto

Re: Mysql Treiber können auf der Entwicklungsumgebung ...

Verfasst: 17. Januar 2013 14:48
von binio
im Pfad "C:\QtSDK\Desktop\Qt\4.8.1\mingw\plugins\sqldrivers" habe ich:
  • libmySQL.dll
    libqsqlmysqld4.a
    qsqlite4.dll
    qsqlited4.dll
    qsqlmysqld4.dll
    qsqlodbc4.dll
    qsqlodbcd4.dll
Ja soll eigentlich Release sein aber unter "Release" scheint er meine "Mysql-Driver nicht zu nehmen oder ich habe die folgenden Dateien nicht im richtigen Verzeichnis"
  • libmySQL.dll
    libqsqlmysqld4.a
    qsqlmysqld4.dll
Zudem glaube ich nicht das die drei Dateien Release "fähig" sind aufgrund der "...d.dll" und "...d4.a" -> Debug-Versionen.
Ich bekomme es auch nicht hin die nochmal zu kompilieren. Ich hatte schon das letzte mal vor monaten davon Alpträume bekommen :evil:
Kann ich nicht die Debug einfach nehmen und dem die Dll auf dem Zielsystem (ohne QT Umgebung) in windows oder system32 kopieren ?

Re: Mysql Treiber können auf der Entwicklungsumgebung ...

Verfasst: 17. Januar 2013 15:03
von odt
ich finde das Erstellen der Plugins auch kompliziert. Beim Einbinden vom Oracle-OCI machte ich den Fehler, dass ich msvc und mingw mischen wollte. :oops:

Grundsätzlich lässt sich auch die Debug-Variante deployen. Sie ist nur "etwas" grösser.
Aber nie mit Release mischen.

Tips:
- auf Entwicklungsrechner ein "Verzeichnis" mit allen exe's und dll's zusammenstellen
- wenn dies hier läuft, aber auf ein anderen Rechner nicht
- hat mysql evt. einen nativen Treiber, der vorausgesetzt wird?
- dependency-walker
- QApplication::libraryPaths() anzeigen

Re: Mysql Treiber können auf der Entwicklungsumgebung ...

Verfasst: 21. Januar 2013 10:14
von Markus
binio hat geschrieben:[...]
Zudem glaube ich nicht das die drei Dateien Release "fähig" sind aufgrund der "...d.dll" und "...d4.a" -> Debug-Versionen.
Ich bekomme es auch nicht hin die nochmal zu kompilieren. Ich hatte schon das letzte mal vor monaten davon Alpträume bekommen[...]
Hallo!

Hast Du mal probiert, das Release-Makefile direkt anzugeben?

Code: Alles auswählen

mingw32-make.exe -f Makefile.Release 

Und sonst habe ich mir mal ein kleines Memo geschrieben wie wich den MySQL-Treiber mit MinGW kompiliere.

Voraussetzung:
Über das MySQL-Server-Setup nur die "Development Components -> Client C API library" installieren.
Wichtig: Keine Leerzeichen im Installationspfad!

Beispiel-Verzeichnisse für dieses Memo:
MySQL-API-Library: C:\MySQL\Server\
Qt: C:\DevTools\QtSDK

Schritt #1:
Qt-Eingabeaufforderung (CMD) starten. Normalerweise existiert ein Eintrag im Startmenü unter "Qt SDK".

Schritt #2:
In das Source-Verzeichnis vom MySQL-Plugin wechseln.
C:\DevTools\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql

Schritt #3:
Mit Hilfe von QMake die Makefiles des Projektes erstellen.
Befehl: qmake "INCLUDEPATH+=C:/MySQL/Server/include" "LIBS+=C:/MySQL/Server/lib/libmysql.lib" mysql.pro

Schritt #4:
Das MySQL-Plugin kompilieren. (Evtl. den gesamten Pfad zum Programm verwenden)
Befehl für die Release-Version: C:\DevTools\QtSDK\mingw\bin\mingw32-make.exe -f Makefile.Release
Befehl für die Debug-Version: C:\DevTools\QtSDK\mingw\bin\mingw32-make.exe -f Makefile.Debug

Schritt #5:
Die Datei "qsqlmysql4.dll" aus dem release-Verzeichnis und wenn kompiliert, die Datei "qsqlmysqld4.dll" aus dem Debug-Verzeichnis in das Standard-Plugin-Verzeichnis C:\DevTools\QtSDK\Desktop\Qt\4.8.1\mingw\plugins\sqldrivers kopieren.

Zusätzlich noch die "libmysql.dll" auf dem Verzeichnis C:\MySQL\Server\lib in das Verzeichnis C:\DevTools\QtSDK\Desktop\Qt\4.8.1\mingw\bin
kopieren, damit das Plugin erkannt wird und der MySQL-Client zur Verfügung steht.

Qt-Check: Mit dem Programmbefehl qDebug() << QSqlDatabase::drivers() sollte der Eintrag "QMYSQL" als Debug-Ausgabe angezeigt werden.


Ich hoffe, es hilft etwas...

Viele Grüße,
Markus

Re: Mysql Treiber können auf der Entwicklungsumgebung ...

Verfasst: 22. Januar 2013 15:16
von binio
Nicht Böse sein das ich so lange nicht geantwortet habe.
Also ich habe erstmal eine Lösung. Sie ist sehr "unschön" !!!
Mit

Code: Alles auswählen

foreach(QString path, QApplication::libraryPaths())
        QMessageBox::information(0,"LIB-Path",path,QMessageBox::Ok,QMessageBox::NoButton);
Habe ich mir die Pfade ausgeben lassen die mein Projekt einbindet bzw. nutzt.

Dann habe ich die ganzen Ordner samt Unterordner auf die Clients kopiert und siehe da es geht :) s. Bildanhang
Ich werde nun das Problem moch weiter eingrenzen um genau oder eine bessere Lösung zu finden.
Meine Ergebnisse werde ich dann hier natürlich posten. Es kann sich aber um ca. zwei Wochen handeln :(