Seite 1 von 2
FAQ-Artikel Wunsch: Embedded Mysql
Verfasst: 17. Februar 2006 08:23
von Lykurg
Hi,
seit kurzem beschäftige ich mich mit Datenbanken und Qt. Dabei machte ich mit SQLite gute Erfahrungen, aber es fehlt mir mind. eine wichtige Funktion:
REGEXP in den SELECT's, und ein Verschlüsseln der Datenbank wäre auch ganz nett.
Wie aber läuft nun ein Umstieg von SQLite zu MySQL? Dass es einige Probleme bei der Erstellung des Treibers geben kann, habe ich der Flut an Postings entnommen, aber es scheint letztendlich doch immer zu klappen.
Andere Fragen, die mir verschlossen blieben waren:
1. Wie sieht bitte die "Datenbank-Datei" aus? Bei SQLite ist das ja nur eine. Sind es bei Embedded MyQSL 3: *.frm, *.MYI, *.MYD?
2. Wenn ich Embedded MyQSL verwende, welchen Host muss ich dann angeben?
Und überhaupt, will nicht jemand der sich damit auskennt, schnell mal einen kurzen FAQ-Eintrag schreiben, der (unter der Voraussetzung, dass man den Treiber hat) die Verwendung von Embedded MyQSL kurz erläutert? Minimalbeispiel, minimalistische Angaben etc. reichten da völlig aus.
Dann hoffe ich mal, dass das hier ein freundlicher Mensch ließt, und 10 min Zeit hat einen solchen Eintrag zu schreiben.
Danke
Lykurg
Verfasst: 23. Juni 2006 10:36
von rel00p
Hallo,
Hast Du denn schon irgendwas in Richtung "embedded mysql" rausfinden können?
Ich habe gestern versucht, einen eingebetten mysql server zu verwenden, es hat leider nicht funktioniert.
Das qt-mysql-plugin habe ich gegen libmysqld gelinkt (mein Testprogramm auch).
"# define Q_NO_MYSQL_EMBEDDED" in qsql_mysql.cpp habe ich auskommentiert (windows).
Der server wird auch gestartet (herausgefunden mittels qDebug() nach mysql_server_init() in qsql_mysql.cpp)
Nur Verbindung kann ich keine aufbauen.
Fehler: "Can't connect to MySQL server on 'localhost' (10061)" und "QMYSQL: Unable to connect".
Da ich garnicht zu 'localhost' verbinden will war ich etwas verwirrt, denn ich habe den Host auch nicht angegeben.
In der MySQL Dokumentation steht, dass die interne (embedded) Verbindung verwendet wird, wenn kein Host oder 'localhost' gesetzt ist.
Also müsste es doch funktionieren. Tut es aber nicht!
Verbindungen zu externen MySQL-Servern funktionieren tadellos.
Das alles unter WinXP mit MinGW und Qt 4.1.3 MySQL 4.1.x
Irgendwelche Vorschläge wie man das Problem beheben kann?
Danke
Mirko
Verfasst: 23. Juni 2006 11:04
von BartSimpson
Ich habe gerade etwas rumgespielt. nur komme ich beim linken nicht weiter.

Laut Quellcode von TT muss man unter Windows die mysqld lib statisch linken. Und eine Zeile im Quellcode des Modues in Qt ändern.
Also gesagt getan statische lib gebaut.(VS c++ Express)
Nur wie soll ich die MS lib nach mingw convertieren??
Denn ein wenn ich die so nehmen stürzt der linker von mingw ab:(
Verfasst: 23. Juni 2006 11:36
von rel00p
Leider habe ich keine Ahnung von VS c++.
Die Mysqllib habe ich nicht selbst gebaut, sondern die aus dem mysql-packet in ...\mysql\Embeded\static\mysqlserver.lib (oder so ähnlich - hab's jetzt nicht hier) verwendet.
die lies sich ohne Fehler gegen das qt-mysql-plugin linken und auch (zum test) gegen mein Programm.
Hast Du mal "reimp" und "dlltool" probiert?
Verfasst: 23. Juni 2006 11:46
von BartSimpson
dlltool ist nutzlos, da ja keine dll existiert.

Wenn ich miir mysql runterlade,gibt es leider nix staisches. Die Verzeichnisse sind leer.
Verfasst: 23. Juni 2006 11:55
von BartSimpson
Laut Doku soll es mit
reimp imp.lib
ar rcs libimp.a *.obj
gehen. doch auch hier hängt sich der linker auf:(
Verfasst: 23. Juni 2006 12:03
von rel00p
BartSimpson hat geschrieben:dlltool ist nutzlos, da ja keine dll existiert.

klar - scheint mir auch logisch
BartSimpson hat geschrieben:Wenn ich miir mysql runterlade,gibt es leider nix staisches. Die Verzeichnisse sind leer.
da du es selbst compiliert hast nehme ich an, du hast die source version von mysql - ich benutzer die binary ("windows Without installer").
http://dev.mysql.com/get/Downloads/MySQ ... isc/mysql/
da sind header und compilierte libs dabei.
Verfasst: 23. Juni 2006 12:09
von BartSimpson
Dann muste auch da zu schreiben, das die 4'er nimmst.
Denn sonste geht jeder davon aus, das die neuste Version benutzte wird.
Verfasst: 23. Juni 2006 12:19
von BartSimpson
So wenn die mysqlserver.lib benutzte passiert aber leider das selbe. egal ob die die lib vorher für den mingw konvertiere oder nicht:(
Verfasst: 23. Juni 2006 12:23
von rel00p
BartSimpson hat geschrieben:Dann muste auch da zu schreiben, das die 4'er nimmst.
Denn sonste geht jeder davon aus, das die neuste Version benutzte wird.
rel00p hat geschrieben:Das alles unter WinXP mit MinGW und Qt 4.1.3 MySQL 4.1.x
habe ich

Verfasst: 23. Juni 2006 12:29
von rel00p
BartSimpson hat geschrieben:So wenn die mysqlserver.lib benutzte passiert aber leider das selbe. egal ob die die lib vorher für den mingw konvertiere oder nicht:(
Schade, bei mir lässt es sich wie gesagt Fehlerfrei compilieren.
Leider habe ich auch gar keine Erfahrung in dem Bereich

ch befasse mich erst seit wenigen Tagen mit c++, qt und co.)
Vielleicht sollte ich doch einfach SQLite nehmen - das funktioniert wenigstens

Verfasst: 23. Juni 2006 12:31
von BartSimpson
Nur leider kenn dies keine Transaktionen. Die werden aber leider benötigt:(
Verfasst: 23. Juni 2006 12:45
von rel00p
Transaktionen gibt's doch in SQLite 3 - oder?
Ich habe eher dass Problem, dass wenn mehr als 255 Zeilen in z.b. einem TableView angezeigt werden ich keine Daten mehr in die SQLite-DB schreiben kann, weil immer ein Lock darauf ist.
Das lässt sich zwar mit
beheben, ist aber sehr langsam bei Tabellen mit vielen Einträgen.
Verfasst: 23. Juni 2006 12:51
von BartSimpson
Mal warten bis der Patch für 4.1.4 fertig ist, damit man den MS Compiler nutzen kann. Dann kann mna nochmal versuchen die 5'er als embeded zum laufen zu bringen:)
Verfasst: 23. Juni 2006 13:21
von rel00p
Schade ist, dass man nirgends im Netz was darüber findet!
Es kann doch nicht sein, dass noch niemand den embedded server mit qt verwendet hat.
So schnell gebe ich aber nicht auf...