QT Win32/MinGW + MySQL Embedded... Alles nur ein Mythos?

Verschiedenes zu Qt
Antworten
edes
Beiträge: 4
Registriert: 15. April 2008 23:28

QT Win32/MinGW + MySQL Embedded... Alles nur ein Mythos?

Beitrag von edes »

Hallo zusammen!

Ich versuche seit Wochen, auf einem Win32/MinGW-System eine QT-Anwendung mit einem MySQL-Embedded-Server zum Laufen zu bringen... bisher ohne Erfolg.

Zu dem Thema gibt es unzählige Threads in verschiedensten QT- und MySQL-Foren, die aber alle entweder vom Typ "Bis hier geht's, und dann komm' ich nicht weiter." oder "Theoretisch geht das so, aber ausprobiert hab ich's noch nicht" sind.

Mir ist kein einziger Fall bekannt, wo am Ende "Danke - Jetzt läuft's!" gestanden wäre, und langsam beginne ich ensthaft an der Machbarkeit meines Projektchens zu zweifeln.

Bevor ich jetzt mit Details zu meiner Entwicklungsumgebung (Eclipse) aufwarte, würde ich einfach gern wissen:

Ist da draußen irgend jemand, der schon einmal eine Win32-Applikation mit QT und MySQL-Embedded in einer MinGW-Umgebung kompiliert und zum Laufen gebracht hat?

Bin schon gespannt...

Schöne Grüße!
Deever
Beiträge: 90
Registriert: 9. Mai 2007 18:20

Beitrag von Deever »

Ohne mich jetzt überhaupt mit dem Thema "Embedded MySQL" auseinandergesetzt zu haben (benutze lieber echte[tm] Datenbanksysteme wie PostgreSQL), würd ich mal behaupten, daß dafür besondere Schnittstellen/Libraries vonnöten sind und du daher deinen eigenen QSqlDriver schreiben musst. Aber ich kann mich irren!

HTH && Gruß,
/dev
edes
Beiträge: 4
Registriert: 15. April 2008 23:28

Beitrag von edes »

Deever hat geschrieben:Ohne mich jetzt überhaupt mit dem Thema "Embedded MySQL" auseinandergesetzt zu haben (benutze lieber echte[tm] Datenbanksysteme wie PostgreSQL), würd ich mal behaupten, daß dafür besondere Schnittstellen/Libraries vonnöten sind und du daher deinen eigenen QSqlDriver schreiben musst. Aber ich kann mich irren!

HTH && Gruß,
/dev
zu "echtes Datenbanksystem": Was immer du damit mit "echt" meinst... Ich würde MySQL schon als vollwertiges RDBMS einstufen. Die Embedded-Variante funktioniert zwar nicht über TCP/IP (sondern direkt übers API) aber deshalb ist sie noch lange nicht "unecht".

zu "besondere Schnittstellen vonnöten": Sollte laut http://doc.trolltech.com/4.3/sql-driver ... sql-server eigentlich nicht der Fall sein.

Und bevor jetzt die nächste (allgemeine) Antwort kommt, dass unter obigem Link ja eh alles beschrieben sei, hier nochmal meine (ganz konkrete) Frage: Hat das schon jemand umsetzen können?

Gruß
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

1. Auch wenn es die Foren-Software ermöglicht, sollte man die Schriftgröße nicht nach belieben vergrößern.
2. Wenn du noch am Anfang deines Projektes stehst, dann solltest du dir wirklich mal Postgres zu Gemüte führen.
edes
Beiträge: 4
Registriert: 15. April 2008 23:28

Beitrag von edes »

upsala hat geschrieben:1. Auch wenn es die Foren-Software ermöglicht, sollte man die Schriftgröße nicht nach belieben vergrößern.
Vielleicht habe ich es ja übersehen, aber ich denke, dass nirgends ein entsprechender Hinweis gegeben wird. Ganz im Gegenteil: in den FAQ und der BBCode-Dokumentation werden die Möglichkeiten verschiedener Formatierungen sogar ausdrücklich beschrieben.

Wenn eine Funktion nicht nur aktiviert, sondern auch ausdrücklich dokumentiert ist, sollte man sich wirklich nicht wundern, wenn diese von den Benutzern auch verwendet wird...
upsala hat geschrieben:2. Wenn du noch am Anfang deines Projektes stehst, dann solltest du dir wirklich mal Postgres zu Gemüte führen.
Danke für den Hinweis, aber ich weiß schon, was ich brauche.


Möchte sonst noch irgendwer seine Oberlehrer-Ambitionen ausleben, oder gibts auch Leute, die auf meine Frage eingehen möchten?
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

bisher ohne Erfolg.
Gib den restlichen 99.9% (die noch nie mit embedded mysql / mingw arbeiten mussten) ne Chance! Erzähl was... ! Woher hast du die libmysqld.dll (selbstgestrickt, aus binary-package)... Hast du Probleme zur Laufzeit oder scheitert das Ganze schon beim Compilen/Linken?

Weil wir noch immer keine Kristallkugel besitzen sind wir auf (Konsolen-)Fehlermeldungen angewiesen..
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Und trotzdem noch mal allgemein gefragt und aus eigenem Intresse .... wozu ?

Ich mein embedded mysql und SQLite stehen irgendwie in direkter konkurrenz.
Wenn du über die QT schiene faehrst, gehen die meisten besonderheiten eines DB Systems soweiso verloren, durch die Abstraktion.

embedded mysql wuerde IMHO nur dann sinn machen, wenn du auf auf backups von "richtigen" Mysqldatenbanken zurueckgreifen willst. weiss ned ob amn die da direkt einspuelen kann ....
Procedures kannst eh da ned verwenden ....
Warum muss es unbedingt embedded mysql sein ?

Ciao ...
edes
Beiträge: 4
Registriert: 15. April 2008 23:28

Beitrag von edes »

@solarix:

Habe schon vieles probiert. Meine jüngsten Versuche sind im wesentlichen analog zur Beschreibung unter http://www.jiggerjuice.net/software/qt-sql-drivers.html.

Die DLL kommt aus der MySQL-Distribution, wobei ich sowohl 4.1er- wie auch 5.1er-Versionen ausprobiert habe. Die DLLs müssen mit reimp und dlltool für die Verwendung in GNU-Umgebungen präpariert werden. Dann muss QT neu kompiliert werden, wobei die DLLs statisch gelinkt werden müssen. Weder beim kompilieren noch beim Linken gibts ein Problem. Eine kleine QT-Applikation zum Testen, kann dann ebenfalls ohne Troubles kompiliert und gestartet werden. Sobald aber ein Objekt vom Typ QSqlDatabase erstellt wird, crasht das Programm.

Gestern ist mir dann der Kommentar "note that it will crash if you don't statically link to the mysql/e library!" aus der qsql_mysql.cpp nochmal in den Sinn gekommen. Also habe ich (erstmals) gecheckt, ob QT (und damit die Applikation) tatsächlich statisch gegen MySQL gelinkt ist - und siehe da: die libmysqld.dll wird noch immer benötigt.

Gebaut habe ich QT mit folgenden Kommandos:

# mingw32-make clean
# configure -debug-and-release -static -qt-sql-mysql -l mysqld -I C:\MySQL\4.1.22\include -L C:\MySQL\4.1.22\embedded\dll\release
# mingw32-make sub-src

@RHBaum:

Meine Hauptmotivation für MySQL liegt darin, dass wir eine Anwendung entwickeln, die gleichzeitig auf einen lokalen Datenstand und auf einen (identisch strukturierten) Datenstand im Netzwerk zurückgreifen soll. Dabei soll das gleiche DBMS verwendet werden, damit identische Operationen auch sicher zu identischen Ergebnissen führen. Aber vielleicht hast du recht, und es ist alles nicht der Mühe Wert...

Schöne Grüße
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Lustig dieses Halbwissen :)

Eine Shared lib kann man nicht in eine static lib umwandeln. Deshalb ist der Kommentar 'note that it will crash if you don't statically link to the mysql/e library!' irgendwie... sinnlos. Und wenn ich Qt statisch baue dann hilft das auch gar nichts.
mit reimp wird ne import-lib erstellt damit man gegen die funktionen der shared lib linken kann, nichts mehr.
Hat natürlich nichts mit deinem Problem zu tun, aber man sollte sich schon ein wenig auskennen bevor man rumnörgelt :D

Einen Crash löst man am besten indem man mal einen Debugger bemüht und nachschaut.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Deever
Beiträge: 90
Registriert: 9. Mai 2007 18:20

Beitrag von Deever »

edes hat geschrieben:Die Embedded-Variante funktioniert zwar nicht über TCP/IP (sondern direkt übers API) aber deshalb ist sie noch lange nicht "unecht".
Mit "echt" meinte ich an Postgres (oder eigentlich an !MySQL) nicht die Netzwerkunterstützung, sondern den Umfang an SQL-Möglichkeiten. Selbst SQLite ist für mich also "echter" als MySQL, das IMHO auch eher als Strafe denn als Datenbank anzusehen ist...;)
Meine Hauptmotivation für MySQL liegt darin, dass wir eine Anwendung entwickeln, die gleichzeitig auf einen lokalen Datenstand und auf einen (identisch strukturierten) Datenstand im Netzwerk zurückgreifen soll. Dabei soll das gleiche DBMS verwendet werden
Überleg dir, ob du MySQL auch lokal nicht einfach als Server laufen lassen willst. Ich kann mich wirklich nicht daran erinnern, auch nur einmal bisher davon gehört zu haben, daß das jemand "embedded" eingesetzt hätte. Und sonst: Firebird ist u.a. genau dafür gemacht, sowohl "embedded" als auch als Server zu laufen.
Christian81 hat geschrieben:Lustig dieses Halbwissen :)

Eine Shared lib kann man nicht in eine static lib umwandeln. Deshalb ist der Kommentar 'note that it will crash if you don't statically link to the mysql/e library!' irgendwie... sinnlos.
Um als shared lib vorhandenen Code statisch zu linken, muß natürlich stattdessen zuerst eine statische Library gebaut werden, klar. Aber ich kann in obiger Aussage beim besten Willen nicht erkennen, daß dem explizit wiedersprochen wird, wieso also Halbwissen?
Einen Crash löst man am besten indem man mal einen Debugger bemüht und nachschaut.
Oder indem man gleich ganz auf C++ verzichtet und stattdessen Python nimmt! *duck*

Gruß,
/dev
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Deever hat geschrieben:
Christian81 hat geschrieben:Lustig dieses Halbwissen :)

Eine Shared lib kann man nicht in eine static lib umwandeln. Deshalb ist der Kommentar 'note that it will crash if you don't statically link to the mysql/e library!' irgendwie... sinnlos.
Um als shared lib vorhandenen Code statisch zu linken, muß natürlich stattdessen zuerst eine statische Library gebaut werden, klar. Aber ich kann in obiger Aussage beim besten Willen nicht erkennen, daß dem explizit wiedersprochen wird, wieso also Halbwissen?
Nunja - entweder Deine eine Doku ist falsch oder die obige Aussage - sie widersprechen sich total. Falls dies in ein und denselben Dokument steht ist es schlicht Unsinn.
Und dann hast Du vresucht Qt statisch zu bauen und gegen eine dynamische sql-lib gelinkt und gewundert warum immer noch die sql-lib benötigt wird.
Einen Crash löst man am besten indem man mal einen Debugger bemüht und nachschaut.
Oder indem man gleich ganz auf C++ verzichtet und stattdessen Python nimmt! *duck*
Da gibts keine Crashes sondern gleich Backtraces, hast recht...


Aber das hilft wohl alles nicht weiter. Kann Dir aber auch nicht wirklich helfen da ich keine Zeit habe das mal kurz durchzukompilieren.
Ich würde mal versuchen es mit MSVC zuu kompilieren - da fällt der reimp Schritt weg und Du siehst ob es dann geht (wovon ich ausgehe, auch mit MinGW)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Deever
Beiträge: 90
Registriert: 9. Mai 2007 18:20

Beitrag von Deever »

Christian81 hat geschrieben:
Deever hat geschrieben:Oder indem man gleich ganz auf C++ verzichtet und stattdessen Python nimmt! *duck*
Da gibts keine Crashes sondern gleich Backtraces, hast recht...
Ja, wesentlich intuitiver und zeitsparender, finde ich...
Kann Dir aber auch nicht wirklich helfen da ich keine Zeit habe das mal kurz durchzukompilieren.
Ich würde mal versuchen es mit MSVC zuu kompilieren
Ich nicht, aber ich bin auch nicht der OP und verwende ohnehin kein Windous, nur Unix/Linux/OSX! ;)

Gruß,
/dev
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

@edes
Dabei soll das gleiche DBMS verwendet werden, damit identische Operationen auch sicher zu identischen Ergebnissen führen. Aber vielleicht hast du recht, und es ist alles nicht der Mühe Wert...
Genau das wuerd ich mir kritisch noch mal durchn kopf gehen lassen ...

- sql ist definiert, also muessten auf abstrakter ebene bei gleichen statements immer identische ergebnisse rauskommen ... wenn man gescheit sondertypen (Datum, uhrzeit etc) abstrahiert.

- die unterschiede die es dann noch geben koennte (Fehlerhaft, oder zeitkritisch / zugriffskritisch ) liegen dann meist an konzeptionellen dingen. und grad da ist embedded sql und das normale Mysql RDBMS ned zu vergleichen ....

embedded sql unterstuetzt nur nen subset der funktionen von mysql
bei embedded hat man immer exklusivzugriff ... multiuser probleme, transaktionen etc fallen da eh raus, was was man bei nem richtigen RDBMS ned unbeachtet lassen sollte ....

Also haettest du nur einen vorteil ... das du den gleichen SQL dialekt verwenden koenntest ...
Das seh ich wieder als nachteil, ich waer eher bestrebt, nur standardisierte sachen (SQL 92 etc.) zu benutzen ^^
Und, seid ihr fuer das RDBMS system mitverantwortlich ? Wenn nein ... dann ist es immer ne saugute idee, sich optionen offenzuhalten :-) die meisten firmen haben Hausstandards, und trotz der Oracle Prognosen koemmen einem da immer ganz seltsame Dinge unter (firebird, mysql, Sybex produkte, MS SQL Server ) ....

Ciao ...
Antworten