QMySQL für Qt4.5 unter Windows

Alles rund um die Programmierung mit Qt
Antworten
wol
Beiträge: 12
Registriert: 28. August 2009 14:04

QMySQL für Qt4.5 unter Windows

Beitrag von wol »

Hallo,

ich will mit einem Qt4.5-Programm unter Windows eine Datenbank ansprechen. Dasselbe Programm unter Debian Linux compiliert schafft das auch, insofern gehe ich bis auf Weiteres mal davon aus dass ich die Datenbankverbindung programmseitig richtig aufbaue. Kurz gesagt, ich kriege es bis jetzt einfach nicht hin :-( Er kennt die drei wohl standardmäßig vorhandenen Treiber, aber nicht QMYSQL. Fehlermeldung nach dem Verbindungsversuch: Driver not loaded.

Diese Anleitung kenne ich natürlich:
http://doc.trolltech.com/4.5/sql-driver ... and-higher

Diese habe ich auch (unter Verwendung von mingw) befolgt. Soweit ich das beurteilen kann ohne Fehler. Als Resultat habe ich jetzt unter C:\Qt\2009.03\qt\plugins\sqldrivers unter anderem die Dateien libqsqlmysql4.a, libqsqlmysqld4.a, qsqlmysql4.dll und qsqlmysqld4.dll liegen.

Nun sagt aber http://wiki.qtcentre.org/index.php?titl ... sing_MinGW dass das so einfach nicht gehen kann. Wenn ich aber der Anleitung folgen will stolpere ich darüber, dass der Link zum Paket mingw-utils tot ist und auf meinem System kein reimp existiert. Gut, also habei ich auf mingw.org etwas rumgesucht und bin auf folgende Seite gestossen:

http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs

Die sagt dass der originale Link zu reimp tot sei und man einen auf der Seite angegebenen alternativen benutzen soll. Der ist aber leider ebenfalls tot :-( Und spätestens an der Stelle fand ich reimp ehrlichgesagt auch nicht mehr so ganz vertrauenserweckend.

So, habt ihr eine Ahnung wie ich diesen Treiber endlich zum Laufen kriege? Ist das wirklich so schwer mit Qt unter Windows eine MySQL-Datenbank anzusprechen, oder stelle ich mich nur so an dabei....?

Nebenbei: Ist es eigentlich normal, dass der MySQL-Treiber (diesesmal unter Linux, wo er ja schon läuft) als Antwort auf einen Syntaxfehler in der Query zwar not successful zurückgibt, aber das QSqlError Objekt den Fehlercode NO_ERROR und keinerlei Fehlertext enthält. So macht Fehlersuche ja richtig Spaß!

So,und nun überzeugt mich mal davon QMYSQL nicht bildlich gesprochen in die Ecke zu werfen :shock:
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn qsqlmysqld4.dll und qsqlmysql4.dll vorhanden sind wurde das Plugin erfolgreich kompiliert. Vielleicht kann er eine abhängige DLL nicht laden? -> depends.exe
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
wol
Beiträge: 12
Registriert: 28. August 2009 14:04

Beitrag von wol »

Das hat schonmal weitergeholfen, aber laden tut er den Treiber noch nicht.

Also, falsch war:
Die dwmapi.dll hat gefehlt. Ich habe sie (per google) unter http://www.dll-files.com/dllindex/dll-f ... tml?dwmapi gefunden, heruntergeladen und mal in C:\windows\system32 platziert.

[Was habe ich da getan? Für was ist diese dll gut und wieso hat sie gefehlt?]

Dann hat miktex :evil: die QtCore4.dll und eine weitere Qt4-dll von Qt4.4.10 in seiner Auslieferung drin, die ins miktex/bin-Verzeichnis gestellt und in die Registry geschrieben dass die als QtCore4.dll verwendet werden soll. Dort konnten dann natürlich die Symbole nicht aufgelöst werden, weil ich baue ja mit meinem Qt4.5.

Das ist jetzt auch behoben, er nimmt jetzt die QtCore4.dll aus dem qt/bin-Verzeichnis. Nun ist in depends.exe noch offen:

Warning: At least one module has unresolved import due to a missing export function in a delay-load dependent module. Als fehlerhaft markiert sind advapi32.dll (Symbol RegGetValueW), user32.dll (IsThreadDesktopComposited) mpr.dll (WNetRestoreConnectionA) und shlwapi.dll (N/A).

Was sagt mir das nun?

Und was sagt das für den Installationsvorgang für einen Programmanwender? Habe ich überhaupt eine Chance mein Programm komplikationsfrei installierbar hinzukriegen? Was ich hier gerade alles hinbiegen muss kann ja irgendwie nicht so ganz sein...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Die Warnung von depdends ist jetzt korrekt.
Und waurm sollte es nicht gehen? Nur weil Du Dlls auf Deinem Rechner gemixt hast? Wenn man mehrere Versionen einer DLL auf der Platte hat muss man eben aufpassen. Wenn du die korrekten Versionen dem Endanwender mitlieferst sehe ich keine Probleme
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
wol
Beiträge: 12
Registriert: 28. August 2009 14:04

Beitrag von wol »

Und z.B. weil ich eine dll nachinstallieren mußte, bei der ich keinerlei Zusammenhang zu Qt sehen kann. Ich meine, natürlich kann ich die auf Verdacht mitliefern. Nur was gibt mir dann die Sicherheit dass es nicht wieder woanders hakt?

Ja, sind alles lösbare Probleme, aber mein erster Eindruck von der Sache bisher ist einfach, dass sie mir nicht sonderlich stabil vorkommt (wenn ich so eine Sache wie dass bei mir unter Linux die QSqlError-Objekte anscheinend keinen brauchbaren Inhalt haben dazurechne). Und ehrlichgesagt, das Vorgehen unter Linux (im Prinzip apt-get install <qt-Paket> und der Treiber lief) ist schon eine Messlatte :-)

Ich lasse mich da aber gerne eines besseren belehren ;-)

(und sollte vielleicht dazusagen dass dlls unter Windows nicht wirklich etwas sind mit der ich schon viel Kontakt hatte...)

So, zurück zum konkreten Problem: Wenn die Warnung jetzt korrekt ist, hast du noch einen Anhaltspunkt was jetzt noch fehlen könnte? Weil funktionieren tut es ja immer noch nicht...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn alles korrekt und an der richtigen Stelle ist wird das Plugin auch geladen. Man kann mal versuchen den Plugin Cache in der Registry zu löschen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
wol
Beiträge: 12
Registriert: 28. August 2009 14:04

Beitrag von wol »

Das habe ich gemacht, ohne Ergebnis (oder muss man danach neu starten?).

Nach dem Löschen habe ich mein Programm wieder gestartet, der Treiber wurde nicht gefunden, nach Beendigung habe ich jetzt einen

Qt Factory Cache 4.5 und einen
Qt Plugin Cache 4.5.debug

in der Registry. Ersterer enthält im Unterordner sqldrivers Einträge für qsqlited4.dll und qsqlodbc4.dll, letzterer enthält im entsprechenden Unterordner Einträge für den gesamten Verzeichnisinhalt des sqldrivers-Verzeichnis, inklusive der qsqlmysql4.dll und qsqlmysqld4.dll

Was kann ich daraus folgern? Dass er die Dateien zwar findet, aber aus irgendeinem Grund nicht verarbeiten kann? Könnte doch (wie in den Links im Ausgangsposting angegeben) die Compilierung mit mingw die Ursache sein?
Antworten