[gelöst] MySQL Plugin funktioniert nur, wenn Programm ohne D
[gelöst] MySQL Plugin funktioniert nur, wenn Programm ohne D
Servus,
also langsam beginnt mich das MySQL-Plugin zu nerven:
als Anfänger hab ich lang genug gebraucht rauszukriegen, wie man das mit MingW kompiliert, damits funktioniert (versteh ich auch nicht, wieso das nicht dabei ist: ich muss es doch auch mit bei geben, wenn ich dann mein Programm weitergebe, oder?
Dann läuft es endlich, ich versuche das ganze am nächsten Rechner, das Kompilieren funktioniert ohne Fehlermeldung, aber der Treiber steht trotzdem nicht zur Verfügung. Ich nehme an, das liegt daran, dass ich hier MySQL 5 auf dem Rechner habe?
Also nehme ich die dlls vom Laptop und schieb sie rüber schon funktionierts hier auch.
Jetzt stellte ich aber fest, dass, wenn ich mein Programm mit make -debug komiliere der MySQL-Treiber nicht mehr funktioniert!
nachdem ich dachte, dass es daran liegt, ich die Debug-Libraries erst kompiliert habe, nachdem ich das MySQL-Plugin kompiliert habe, habe ich jetzt also das MySQL-Plugin nochmal kompiliert und siehe da: es geht natürlich wieder gar nix mehr.
Jetzt kann ich mir zwar morgen wieder die .dll vom Laptop mitnehmen aber das bringt mich auch nicht weiter.
was muss man denn anders machen, um mit dem Plugin auch debuggen zu können?
also langsam beginnt mich das MySQL-Plugin zu nerven:
als Anfänger hab ich lang genug gebraucht rauszukriegen, wie man das mit MingW kompiliert, damits funktioniert (versteh ich auch nicht, wieso das nicht dabei ist: ich muss es doch auch mit bei geben, wenn ich dann mein Programm weitergebe, oder?
Dann läuft es endlich, ich versuche das ganze am nächsten Rechner, das Kompilieren funktioniert ohne Fehlermeldung, aber der Treiber steht trotzdem nicht zur Verfügung. Ich nehme an, das liegt daran, dass ich hier MySQL 5 auf dem Rechner habe?
Also nehme ich die dlls vom Laptop und schieb sie rüber schon funktionierts hier auch.
Jetzt stellte ich aber fest, dass, wenn ich mein Programm mit make -debug komiliere der MySQL-Treiber nicht mehr funktioniert!
nachdem ich dachte, dass es daran liegt, ich die Debug-Libraries erst kompiliert habe, nachdem ich das MySQL-Plugin kompiliert habe, habe ich jetzt also das MySQL-Plugin nochmal kompiliert und siehe da: es geht natürlich wieder gar nix mehr.
Jetzt kann ich mir zwar morgen wieder die .dll vom Laptop mitnehmen aber das bringt mich auch nicht weiter.
was muss man denn anders machen, um mit dem Plugin auch debuggen zu können?
Zuletzt geändert von mikro am 25. April 2006 21:31, insgesamt 1-mal geändert.
mit der forum suche solltest Iher landen...
http://www.qtforum.de/forum/viewtopic.p ... eimp+mysql
ciao
http://www.qtforum.de/forum/viewtopic.p ... eimp+mysql
ciao
tja, wäre ich in dem thread (und den damit verbundenen) nicht schonmal gewesen, hätte ich ja noch nie die Plugins erfolgreich kompilieren können. Aber auch mit dieser Kenntnis bleibt das alles für mich unbegreiflich:
ich habs jetzt an einem anderen Rechner probiert: MySQL 4.1, Qt, MingW alles frisch installiert, dann ins Qt-hauptverzeichnis und ein configure mit MySQL-Plugin und den Lib- und Include-Angaben dafür gestartet. Danach make.
Ist erst mal am MySQL-Plugin gescheitert. Dann bin ich ins sqldrivers-verzeichnis und habe dort das Plugin mit Angabe der gleichen Include und Lib-Pfade problemlos kompilieren können. Danach wieder make im Hauptverzeichnis aufgerufen und das lief fehlerfrei zu Ende.
Jetzt verstehe ich zwar nicht, wieso ich das Plugin erst von Hand kompilieren musste und das mit dem Make aus dem Hauptverzeichnis einen Fehler gab, aber egal: Keine Fehlermeldungen und im Plugins/sqldrivers-Verzeichnis sind die 2 Dlls und die zwei .a
Trotzdem geht das Plugin nicht! Ich habe bei meinem Projekt ein make clean gemacht und dann make release, bzw. make debug: auf dem Rechner funktioniert das Plugin weder bei release noch bei debug.
ich prüfe mit:
und bekomme an diesem Rechner gesagt, dass es nur ODBC, ODBC3 und Sqlite gäbe. Ich habe daraufhin mal das probiert:
und bekomme gesagt, dass unter C:\qt\4.1.2\plugins bzw. direkt im projektverzeichnis gesucht wird.
die dlls und .a sind in c:\qt\4.1.2\plugins\sqldrivers und ich habe auch mal versucht sie ins projektverzeichnis bzw. in ein unterverzeichnis plugins oder sqldrivers oder gar plugins\sqldrivers des Projektverzeichnisses zu kopieren. Nichts hilft !
Also welche Dokumentation soll ich als nächstes lesen?
ich habs jetzt an einem anderen Rechner probiert: MySQL 4.1, Qt, MingW alles frisch installiert, dann ins Qt-hauptverzeichnis und ein configure mit MySQL-Plugin und den Lib- und Include-Angaben dafür gestartet. Danach make.
Ist erst mal am MySQL-Plugin gescheitert. Dann bin ich ins sqldrivers-verzeichnis und habe dort das Plugin mit Angabe der gleichen Include und Lib-Pfade problemlos kompilieren können. Danach wieder make im Hauptverzeichnis aufgerufen und das lief fehlerfrei zu Ende.
Jetzt verstehe ich zwar nicht, wieso ich das Plugin erst von Hand kompilieren musste und das mit dem Make aus dem Hauptverzeichnis einen Fehler gab, aber egal: Keine Fehlermeldungen und im Plugins/sqldrivers-Verzeichnis sind die 2 Dlls und die zwei .a
Trotzdem geht das Plugin nicht! Ich habe bei meinem Projekt ein make clean gemacht und dann make release, bzw. make debug: auf dem Rechner funktioniert das Plugin weder bei release noch bei debug.
ich prüfe mit:
Code: Alles auswählen
QString fehler;
fehler = "QMYSQL Treiber konnte nicht geladen werden\n";
fehler += "vorhandene Treiber:\n";
// prüfen welche Datenbanktreiber zur Verfügung stehen
foreach ( const QString& driver, QSqlDatabase::drivers() ){
fehler += qPrintable( driver );
fehler += "\n";
}
QMessageBox::critical(0, "Kann keine Datenbankverbindungen aufbauen", fehler);Code: Alles auswählen
QString fehler;
foreach (QString path, app.libraryPaths()) {
fehler += path + "\n";
}
QMessageBox::critical(0, "Kann keine Datenbankverbindungen aufbauen", fehler);
die dlls und .a sind in c:\qt\4.1.2\plugins\sqldrivers und ich habe auch mal versucht sie ins projektverzeichnis bzw. in ein unterverzeichnis plugins oder sqldrivers oder gar plugins\sqldrivers des Projektverzeichnisses zu kopieren. Nichts hilft !
Also welche Dokumentation soll ich als nächstes lesen?
ich bekenne mich auch als anfaenger im qt4 nach 2 monaten... ( auch wenn ich php seit 10 jahre schreibe)
Doch zwischen durch ... teste ich plug-in mit http://bloodshed.net/dev/devcpp.html mysql , curl , libxml2 , expath ecc....
ganz besonders die beispiele ...
und ohne mysql zu installieren habe ich einfach die libmysql Library version: 5.0.5 Devpak version: 1sid geholt bei http://devpaks.org/category.php?category=Database installiert ....
das example aus mysql compiliert .. und es funktioniert....
mit meinem linux server verbunden ..... extern...
und plug-in die dort funktionieren gehen auch mit qt ... ist ja auch mingw...
Doch zwischen durch ... teste ich plug-in mit http://bloodshed.net/dev/devcpp.html mysql , curl , libxml2 , expath ecc....
ganz besonders die beispiele ...
und ohne mysql zu installieren habe ich einfach die libmysql Library version: 5.0.5 Devpak version: 1sid geholt bei http://devpaks.org/category.php?category=Database installiert ....
das example aus mysql compiliert .. und es funktioniert....
mit meinem linux server verbunden ..... extern...
Code: Alles auswählen
#include <windows.h>
#include <iostream>
#include <mysql/mysql.h>
using namespace std;
int main()
{
//connection params
char *host = "ipadress";
char *user = "*****";
char *pass = "*****";
char *db = "******";
//sock
MYSQL *sock;
sock = mysql_init(0);
if (sock) cout << "sock handle ok!" << endl;
else {
cout << "sock handle failed!" << mysql_error(sock) << endl;
}
//connection
if (mysql_real_connect(sock, host, user, pass, db, 0, NULL, 0))
cout << "connection ok!" << endl;
else {
cout << "connection fail: " << mysql_error(sock) << endl;
}
//connection character set
cout << "connection character set: " << mysql_character_set_name(sock) << endl;
//wait for posibility to check system/mysql sockets
system("PAUSE");
//closing connection
mysql_close(sock);
return EXIT_SUCCESS;
}
Danke, schön, dass es noch andere, nicht Allwissende gibt 
Dein Bsp ist ja ok, aber es verwendet, denke ich, nicht das Qt-Sql-Plugin? das würde ich aber gerne verwenden, soll ja alles portierbar sein.
ich habe mir jetzt auch das .devpak geholt, nachdem das ja auch in einem anderen Thread vorgeschlagen wurde und anstatt meine eigene .a zu erzeugen die verwendet.
Dann habe ich Qt von c:\qt\4.1.2 aus mit
folgenden Optionen konfiguriert:
Das kompilieren funktioniert wunderbar, bis es zu den Examples kommt. Zu diesem Zeitpunkt sind die plugins bereits kompiliert (ich hatte vorher ein make distclean gemacht, d.h. die müssen neu sein), dass ging wieder ohne Fehler, aber dann kommen plötzlich solche Fehler:
woran kann das denn jetzt liegen? Ich bin nach wie vor in der Qt-Eingabeaufforderung, da sollte er doch alles finden?
Dein Bsp ist ja ok, aber es verwendet, denke ich, nicht das Qt-Sql-Plugin? das würde ich aber gerne verwenden, soll ja alles portierbar sein.
ich habe mir jetzt auch das .devpak geholt, nachdem das ja auch in einem anderen Thread vorgeschlagen wurde und anstatt meine eigene .a zu erzeugen die verwendet.
Dann habe ich Qt von c:\qt\4.1.2 aus mit
folgenden Optionen konfiguriert:
Code: Alles auswählen
configure
-debug-and-release
-plugin-sql-mysql
-plugin-sql-sqlite
-I C:\libmysql\include
-L c:\libmysql\lib
-l mysql
-fastCode: Alles auswählen
relationaltablemodel.cpp:25:17: QtSql: No such file or directory
In file included from relationaltablemodel.cpp:27:
../connection.h:28:24: QSqlDatabase: No such file or directory
viel zu viel optionen mingw kann der original lib -L c:\libmysql\lib nicht gebrauchen!! ausser man geht mit der reimp option ... darum sagte ich die devpack holen mit mingw compiliert! .... kanst auch umbenennen auf mysqlpack.bz2 entpacken und sehen was drinnen ist... es sind die libs und die mysql include...mikro hat geschrieben: folgenden Optionen konfiguriert:?Code: Alles auswählen
configure -debug-and-release -plugin-sql-mysql -plugin-sql-sqlite -I C:\libmysql\include -L c:\libmysql\lib -l mysql -fast
mein configure ... config.cache ... von qt4.1.1
configure.exe -qt-sql-sqlite -qt-sql-odbc
fertig keine zeile mehr... debug release ecc... ist nicht noetig...
das kann man im pro file fuer neue projekte jedesmal neu definieren...
wen qt4 da ist und fertig steht dann hast du auch die doc assistant.exe und mysql plug-in erst dann nach -komplilieren als plug-in ist auch im assistant.exe unter driver sql mysql...
lauft auch mysql-amministrator user pass dort gehen ... auf deinem pc geht mysql als service verbunden?
externe mysql server (firewall zu)?...
wielleicht gibt es doch kleine diff... von...
ftp://ftp.trolltech.com/qt/source/qt-wi ... -4.1.1.zip
ftp://ftp.trolltech.com/qt/source/qt-wi ... -4.1.2.zip
ich brauche qt4.1 und qt3.5 muss nur die QTDIR variable aendern... um auch qt3.5 zu komilieren....
ist mir klar. deswegen hatte ich vorher immer mit reimp die .a erzeugt bzw. diesmal, wie geschrieben, das devpak verwendet. ist also keineswegs die originaldll von MySQLpatrik08 hat geschrieben: viel zu viel optionen mingw kann der original lib -L c:\libmysql\lib nicht gebrauchen!! ausser man geht mit der reimp option ... darum sagte ich die devpack holen mit mingw compiliert! ....
so dachte ich das auch immer, aber nachdem das nie funktioniert hat, werde ich halt langsam verzweifelt - sind jetzt halt doch schon ein paar Tage die ich mich damit rumärger anstatt weiter zu kommen.patrik08 hat geschrieben: configure.exe -qt-sql-sqlite -qt-sql-odbc
fertig keine zeile mehr... debug release ecc... ist nicht noetig...
das kann man im pro file fuer neue projekte jedesmal neu definieren...
vorher ja, jetzt habe ich ja nur noch das devpack drauf nicht mehr den server. Der Server den ich ansprechen will steht im büro. da komm ich aber problemlos über den tunnel hin - lief ja auch schonmal alles, aber eben nur im release-build.patrik08 hat geschrieben: lauft auch mysql-amministrator user pass dort gehen ... auf deinem pc geht mysql als service verbunden?
externe mysql server (firewall zu)?...
ich hab schon 4.1.2 drauf - fange ja gerade erst an mir das anzueignen.patrik08 hat geschrieben: wielleicht gibt es doch kleine diff... von...
ftp://ftp.trolltech.com/qt/source/qt-wi ... -4.1.2.zip
na gut, als nächstes probier ich mal so wie Du MySQL direkt einzukompilieren, vielleicht funktioniert das ja.
au mann, das wars wohl: ich hab wohl zuviel Foren gelesen (hier und qtcentre.org) und das dann alles ausprobiert. habe jetzt auf meinem laptop wieder qt und mingw deinstalliert, neu installiert, "Build Debug Libraries" aus dem Startmenü gewählt und laufen gelassen ohne irgendwelche Optionen zu ändern. Danach das MySQL-Devpack geholt, entpackt und damit das MySQL Plugin compiliert, wie in deinem Post http://qtforum.de/forum/viewtopic.php?t=1655 hier ganz unten (hatte ich vorher durchaus auch schon gemacht, aber da war wohl alles schon so im A...rgen)patrik08 hat geschrieben:viel zu viel optionen
und diesmal klappts. Er macht wohl derzeit nur Debug und nicht mehr Release, aber das ist mir jetzt auch erstmal wurst - MySQL läuft und gerade habe mit CodeBlocks auch mal den Gnu Debugger lauschen lassen. Ok, er hat nirgends gehalten wo er sollte, aber das bedeutet wohl eher, dass ich mich als nächstes mehr mit dem Debuggen mit gdb beschäftigen sollte
Danke nochmal.
so, der Vollständigkeit halber:
zumindest jetzt mit Version 4.1.3 klappte das auf zwei Rechnern prima:
mysql-devpak holen (Adresse im Beitrag von patrik08 oben). und nach c:\mysql entpackt
in c:\qt\4.1.3\bin in der Datei qtvars.bat
die 4t-letzte Zeile ergänzt, dass der configure-Aufruf so lautet:
zumindest jetzt mit Version 4.1.3 klappte das auf zwei Rechnern prima:
mysql-devpak holen (Adresse im Beitrag von patrik08 oben). und nach c:\mysql entpackt
in c:\qt\4.1.3\bin in der Datei qtvars.bat
die 4t-letzte Zeile ergänzt, dass der configure-Aufruf so lautet:
und dann aus dem startmenü "build debug libraries" aufrufen und los gehtsconfigure -plugin-sql-sqlite -plugin-sql-odbc -qt-libpng -qt-libjpeg -plugin-sql-mysql -I c:\mysql\include -L c:\mysql\lib -l mysql
na also.... ist doch halb so schlimm..... es wuerde mich trosdem interessieren mit was fuer ein compiler mysql di lib ueberzetz dass es an so viele leute trouble geben....
Bis heute mit meine 2-3 monaten qt4 erfahrung habe ich sicher 8 libs kompiliert ... aber noch niie solche original wie mysql rausgibt....
Bis heute mit meine 2-3 monaten qt4 erfahrung habe ich sicher 8 libs kompiliert ... aber noch niie solche original wie mysql rausgibt....
na schön wärs. hab inzwischen feststellen müssen, dass er das neu compilierte Plugin trotzdem nicht verwenden mag. Wieso weiss ich noch nicht, kompiliert ist es ohne Fehlermeldung und liegt auch brav unter $QTDIR\plugins\sqldriver. Werd jetzt doch noch mal versuchen MySQL 4 draufzuspielen und damit zu kompilieren. Vielleicht klappt das doch besser als das devpak (obwohl die ja auch mit MingW kompiliert wurden)patrik08 hat geschrieben:na also.... ist doch halb so schlimm...
Das wort plug-in sagt doch alles... in den 2-3 monaten erfahrung mit qt4 wo ich habe wurde ich es unstable-in benennen .... und nicht plug-in ....
Darum spreche ich die libs sqlite3 direkt an... die sind alle da ... shaue mal http://www.qtforum.de/forum/viewtopic.php?t=2131 (oder probiere svn co http://ciz.ch/svnciz/dialog_qt/qt4_a/sqlite3_table/ test zu kompilieren ohne sqlplugin) ohne umweg mit plug-in... geht vielleich mit 10% mehr zeit .. aber eine static libs .. braucht denn auch keine dll... und muss keine 20% mehr zeit investieren um die qtsql zu lernen....mit modell ecc...
Meine applikation endet am ende auch in eine mysql datenbank... aber der qt client muss doch davon nichts wissen... zum guten gluck gibt es noch php auf dem server ... wo die daten ankommen ... als xml...
und die libs zu mysql die sind auch alle da bei www.mysql.de ....
warum nicht gebrauchen...
Darum spreche ich die libs sqlite3 direkt an... die sind alle da ... shaue mal http://www.qtforum.de/forum/viewtopic.php?t=2131 (oder probiere svn co http://ciz.ch/svnciz/dialog_qt/qt4_a/sqlite3_table/ test zu kompilieren ohne sqlplugin) ohne umweg mit plug-in... geht vielleich mit 10% mehr zeit .. aber eine static libs .. braucht denn auch keine dll... und muss keine 20% mehr zeit investieren um die qtsql zu lernen....mit modell ecc...
Meine applikation endet am ende auch in eine mysql datenbank... aber der qt client muss doch davon nichts wissen... zum guten gluck gibt es noch php auf dem server ... wo die daten ankommen ... als xml...
und die libs zu mysql die sind auch alle da bei www.mysql.de ....
warum nicht gebrauchen...
weil ich Qt verwende um es zu gebrauchen. Natürlich könnte ich auch einfach direkt auf die MySQL-Libraries zugreifen. Dann wars das aber mit dem kompilieren unter Mac oder Linux. Dann kann ich ja gleich MS Visual Basic nehmen 
Also ein Stückchen bin ich ja immerhin schon weiter:
dass das frisch kompilierte Plugin nicht wollte, lag zuerst daran, dass ich noch das mit dem alten kompilierte Programm, bzw. QtCore4d.dll etc. vom letzten Mal verwendete.
Jetzt krieg ichs auf Rechnern auf denen Qt installiert ist auch dann zum laufen, wenn ich mein $QTDIR\plugins-Verzeichnis umbenenne, das Programm also auf die Kopie des Plugins unter programmdir\plugins\sqldrivers zurückgreifen muss.
Auf anderen Rechnern gehts noch nicht - das SQLite-Plugin geht, das MySQL nicht. ich hab mir die qmysqld.dll mal mit depends angeschaut und festgestellt, dass die von der libmysql.dll abhängt!
Kann man das irgendwie anders kompilieren, dass das MySQL-Plugin keine weiteren Dlls braucht?
Also ein Stückchen bin ich ja immerhin schon weiter:
dass das frisch kompilierte Plugin nicht wollte, lag zuerst daran, dass ich noch das mit dem alten kompilierte Programm, bzw. QtCore4d.dll etc. vom letzten Mal verwendete.
Jetzt krieg ichs auf Rechnern auf denen Qt installiert ist auch dann zum laufen, wenn ich mein $QTDIR\plugins-Verzeichnis umbenenne, das Programm also auf die Kopie des Plugins unter programmdir\plugins\sqldrivers zurückgreifen muss.
Auf anderen Rechnern gehts noch nicht - das SQLite-Plugin geht, das MySQL nicht. ich hab mir die qmysqld.dll mal mit depends angeschaut und festgestellt, dass die von der libmysql.dll abhängt!
Kann man das irgendwie anders kompilieren, dass das MySQL-Plugin keine weiteren Dlls braucht?
Warum? qt kann prima static libs bauen ob mac win oder linux ....mikro hat geschrieben:weil ich Qt verwende um es zu gebrauchen. Natürlich könnte ich auch einfach direkt auf die MySQL-Libraries zugreifen. Dann wars das aber mit dem kompilieren unter Mac oder Linux. Dann kann ich ja gleich MS Visual Basic nehmen![]()
die qt plug-in baust du ja auch mit qt4...
jede db kann mann anpassen....
Code: Alles auswählen
TEMPLATE = lib
TARGET +=
DEPENDPATH += .
INCLUDEPATH += .
TEMPLATE =lib
CONFIG += qt warn_off release staticlib
LANGUAGE = C
#DEFINES -= UNICODE
DEFINES += NDEBUG THREAD_SAFE=1 TEMP_STORE=2
DESTDIR = ../all_os_libs/
win32:TARGET = sqlite3
unix:TARGET = sqlite3
mac:TARGET = sqlite3
unix {
UI_DIR = .ui
MOC_DIR = .moc
OBJECTS_DIR = .obj
}
mac {
UI_DIR = .ui
MOC_DIR = .moc
OBJECTS_DIR = .obj
DEFINES += HAVE_USLEEP=1
}
unix {
UI_DIR = .ui
MOC_DIR = .moc
OBJECTS_DIR = .obj
}
ich glaube wir reden aneinander vorbei: ich hatte Dich so verstanden, dass Du direkt die SQLite-Libs verwendest, aber nach deinem letzten Post meinst Du wohl, dass Du zwar den Qt-Treiber nimmst, aber nicht als plugin sondern eingebaut?
Muss ich dann gar nix mehr weitergeben ausser der .exe? nicht mal mehr die MySQL-libs?
Sollte ich vielleicht doch mal probieren. ich nehme aber an, dazu sollte ich erst mal meine Qt-Config ändern und das nochmal kompilieren?
Muss ich dann gar nix mehr weitergeben ausser der .exe? nicht mal mehr die MySQL-libs?
Sollte ich vielleicht doch mal probieren. ich nehme aber an, dazu sollte ich erst mal meine Qt-Config ändern und das nochmal kompilieren?