FAQ-Artikel Wunsch: Embedded Mysql

Verschiedenes zu Qt
Lykurg
Beiträge: 30
Registriert: 9. August 2004 17:30

FAQ-Artikel Wunsch: Embedded Mysql

Beitrag 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
rel00p
Beiträge: 8
Registriert: 23. Juni 2006 10:17

Beitrag 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
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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:(
rel00p
Beiträge: 8
Registriert: 23. Juni 2006 10:17

Beitrag 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?
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

dlltool ist nutzlos, da ja keine dll existiert.:)
Wenn ich miir mysql runterlade,gibt es leider nix staisches. Die Verzeichnisse sind leer.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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:(
rel00p
Beiträge: 8
Registriert: 23. Juni 2006 10:17

Beitrag von rel00p »

BartSimpson hat geschrieben:dlltool ist nutzlos, da ja keine dll existiert.:)
klar - scheint mir auch logisch :oops:
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.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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:(
rel00p
Beiträge: 8
Registriert: 23. Juni 2006 10:17

Beitrag 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 :D
rel00p
Beiträge: 8
Registriert: 23. Juni 2006 10:17

Beitrag 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 (Ich befasse mich erst seit wenigen Tagen mit c++, qt und co.)

Vielleicht sollte ich doch einfach SQLite nehmen - das funktioniert wenigstens :lol:
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Nur leider kenn dies keine Transaktionen. Die werden aber leider benötigt:(
rel00p
Beiträge: 8
Registriert: 23. Juni 2006 10:17

Beitrag 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

Code: Alles auswählen

while (myModel->canFetchMore())
        myModel->fetchMore();
beheben, ist aber sehr langsam bei Tabellen mit vielen Einträgen.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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:)
rel00p
Beiträge: 8
Registriert: 23. Juni 2006 10:17

Beitrag 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...
Antworten