Seite 1 von 1

Zugriff auf Mysql durch Webprogramm

Verfasst: 7. März 2007 16:19
von webmaster1987
Hallo zusammen,

ich will ein Programm erstellen welches später auf einem Webserver liegen wird, es soll von PHP angestoßen werden um komplexe und zeitaufwendige Berechnungen durchzuführen. Das ganz soll ein Konsolenprogramm werden welches auf eine Mysql Datenbank zugreifen soll, um Daten zu selektieren und zu speichern. Soweit so gut das, dass Programm von PHP ausgeführt wird und seine Aufgabe erfüllt habe ich geschafft nur weiß ich leider nicht wie ich mit QT auf die DB zugreifen soll ich habe mir die beispiele angeschaut und ausprobiert, dabei entstand auf meinem System (Windows XP Qt 4.2.0 / 4.1.4, minggw) folgendes Problem:

Code: Alles auswählen

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
	db.setHostName("localhost");
	db.setDatabaseName("db");
	db.setUserName("user");
	db.setPassword("pw");
    bool ok = db.open();
Das einfach verbinden erzeugte den Fehler:
QSqlDatabase: QMYSQL driver not loaded

QSqlDatabase: available drivers:
Beendet
Also so wie ich das hier sehe muss da wohl noch der Treiber verfügbar gemacht werden, bin ich im Bezug auf Datenbankverbindung mit c++ / QT nicht so firm. Also wäre ich sehr dankbar wenn mir jemand helfen könnte.

mfg Webmaster1987

Verfasst: 7. März 2007 16:49
von macman
Die Suche hier könnte helfen. Ohne alles gelesen zu haben, weiß ich doch das hier schon einiges über Qt und MySQL veröffentlicht wurde.

Verfasst: 7. März 2007 17:07
von webmaster1987
Das hab ich auch gemacht aber habe keine Lösung gefunden.

Re: Zugriff auf Mysql durch Webprogramm

Verfasst: 7. März 2007 19:52
von patrik08
webmaster1987 hat geschrieben:Hallo zusammen,
Also so wie ich das hier sehe muss da wohl noch der Treiber verfügbar gemacht werden, bin ich im Bezug auf Datenbankverbindung mit c++ / QT nicht so firm. Also wäre ich sehr dankbar wenn mir jemand helfen könnte.
mfg Webmaster1987
Auf Window ist dass leben eben komplizierter als auf linux......
Wenn dein ziel server window ist wo dass php lauft .... dann musst du qt4.2 von neu kompilieren.....
Wenn dein server linux ist dann programmiere direkt dort ... auf Ubuntu 7.04 Feisty findest du dass paket qt4.2 mit sql && mysql support ....
oder aud einen deinen liebling linux....

apt-cache search qt4

apt-get source qt4.2 xx
apt-get build-dep qt4.2 xx
dpkg-buildpackage -us -uc -rfakeroot

und dann hast du alles was zu qt4 dazugehoert....

Auf window .... habe ich es niee!!!!! fertig gebracht mysql nach doc zu kompilieren.... aber ich habe es trotzdem zum laufen gebracht....

window XP && mingw compiler....
Zuerst habe ich die dll mysql reimp nach compiler gerecht gewandelt...
die resultierende lib (alle) habe ich dann in mingw lib path kopiert ... und die include mysql file im compiler include .... so als ob mysql lib && dll zum comiler passend.... sind ( haha).... dass alles nur weil ein microsoft compiler der job macht...


dann starte ich die qt4.2 compilation ... wenn alle path envoirment auch stimmen...

ganz einfach:

configure -qt-sql-mysql -qt-sql-odbc -qt-sql-sqlite -qt-gif -qt-libpng -qt-libjpeg

PS: die libs umwandlug....
reimp -d libmysql.lib
dlltool -k --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a
dlltool --input-def libmysql.def --dllname libmysql.dll --output-lib c:\libmysql.a



dann geht auch .... auf jedem OS.... ich connecte sogar mit 2 datenbanken gleichzeitig ... lan && web ... dann habe ich auch einen backup db ..
die select wo es am schnellstens geht ... und die update auf beiden....

Code: Alles auswählen


 db_0 = QSqlDatabase::addDatabase("QMYSQL",QString("LanConnection_%1").arg(connectnr));  /* QMYSQL */
     db_0.setHostName(OneVar["dbhost1"]);
     db_0.setDatabaseName(OneVar["dbbase1"]);
     db_0.setUserName(OneVar["dbuser1"]);
     db_0.setPassword(OneVar["dbpass1"]);  /* OneVar["LIMITSQL"] */
     db_0.open();
    
      if (db_0.isOpen()) {
	      cnn1 = true;
          tableslist_0 = db_0.tables();
          counttable_0 = tableslist_0.size();
          qDebug() << "### table count primo      " << tableslist_0.size();
      } else {



Verfasst: 7. März 2007 22:22
von webmaster1987
Okay danke schon mal für die ausführliche Antwort:

Also ich führe

configure -qt-sql-mysql -qt-sql-odbc -qt-sql-sqlite -qt-gif -qt-libpng -qt-libjpeg

aus muss ich das dann auch kompilieren oder reicht es die Vorbereitungen zu treffen? (gibts ne Möglichkeit das Kompilieren zu beschleunigen dauert ewig?)

und dann ?

kannst du erklären was das macht und "reimp" kennt meine konsole nicht also wo muss ich das ausführen :oops:

reimp -d libmysql.lib
dlltool -k --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a
dlltool --input-def libmysql.def --dllname libmysql.dll --output-lib c:\libmysql.a


Ich steh so ein wenig auf dem Schlau was da so alles passieren muss. Also Qt muss sich selbst den Treiber erstellen bzw die dll dann müssen lips erstellt werden die dazu da sind die Verbindungen zwischen den ganzen mysql und qt dlls zu erstellen.

Und noch ne Frage kann ich eine einzelne exe erstellen ohne irgendwelche Konfigurationen auf dem späteren webserver durchführen zu müssen also statisch linken weiß ich ja aber geht das auch mit den sql Treibern klar wird wahrscheinlich ein Linux Server sein.

edit: Habe die configure ausgeführt und dieser Fehler kam raus (hatte Qt nochmal neu installiert):
...
g++ -c -include tmp\obj\debug_static\qt_pch.h -g -g -Wall -frtti -fexceptions -D
QT_THREAD_SUPPORT -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_BUILD_SQL_LIB -DQT_NO_CA
ST_TO_ASCII -DQT3_SUPPORT -DQT_MOC_COMPAT -DQT_NO_CAST_FROM_ASCII -DQT_CORE_LIB
-I"C:/Programme/Qt/4.1.4/include/QtCore" -I"C:/Programme/Qt/4.1.4/include" -I"C:
/Programme/Qt/4.1.4/include/QtSql" -I"tmp" -I"..\3rdparty\sqlite" -I"C:/Programm
e/Qt/4.1.4/include/ActiveQt" -I"tmp\moc\debug_static" -I"." -I"..\..\mkspecs\win
32-g++" -o tmp\obj\debug_static\qsqldatabase.o kernel\qsqldatabase.cpp
In file included from kernel\qsqldatabase.cpp:36:
kernel\/../drivers/mysql/qsql_mysql.h:34:19: mysql.h: No such file or directory
In file included from kernel\qsqldatabase.cpp:36:
kernel\/../drivers/mysql/qsql_mysql.h:84: error: expected `)' before '*' token
mingw32-make[3]: *** [tmp\obj\debug_static\qsqldatabase.o] Error 1
mingw32-make[3]: Leaving directory `C:/Programme/Qt/4.1.4/src/sql'
mingw32-make[2]: *** [debug-all] Error 2
mingw32-make[2]: Leaving directory `C:/Programme/Qt/4.1.4/src/sql'
mingw32-make[1]: *** [sub-sql-make_default-ordered] Error 2
mingw32-make[1]: Leaving directory `C:/Programme/Qt/4.1.4/src'
mingw32-make: *** [sub-src-make_default-ordered] Error 2

Verfasst: 8. März 2007 00:09
von patrik08
webmaster1987 hat geschrieben:Okay danke schon mal für die ausführliche Antwort:

Also ich führe

configure -qt-sql-mysql -qt-sql-odbc -qt-sql-sqlite -qt-gif -qt-libpng -qt-libjpeg
Richtig ... wenn alle gebrauchte libs am richtigen platz sind.... sowie include header dateien

was nicht der fall ist wenn du fragst was " reimp " ist....

aus muss ich das dann auch kompilieren oder reicht es die Vorbereitungen zu treffen? (gibts ne Möglichkeit das Kompilieren zu beschleunigen dauert ewig?)

und dann ?
gramme/Qt/4.1.4/src'
mingw32-make: *** [sub-src-make_default-ordered] Error 2
Dein missverstandes wort lautet reimp -> http://www.mingw.org/mingwfaq.shtml trifft naturlich nur zu wenn du mingw al compiler benutzt.....

Reimp && dlltool sind bestanteil vom compiler .... http://www.complex-computer.de/albumsha ... stall_MSYS
Da die mysql libs mit Microfost compiler gebuildet sind..... muessen die dll auf eine Mingw norm gebracht werden....

also 1 die mysql-server holen installieren mit dev-libs.
die dll konvertieren ... zum compiler dazu setzen und builden wie bereist oben gesagt.....

Verfasst: 8. März 2007 00:19
von patrik08
webmaster1987 hat geschrieben:Okay danke schon mal für die ausführliche Antwort:
Und noch ne Frage kann ich eine einzelne exe erstellen ohne irgendwelche Konfigurationen auf dem späteren webserver durchführen zu müssen also statisch linken weiß ich ja aber geht das auch mit den sql Treibern klar wird
[/quote]

Zuerst builde deinen mysql console programm auf dem window ...
so dass es auch mit einem bat file gehen kann oder ein php script....

Dann loggs du dich auf dem linux server ein ....
und mache ein shell
qmake -v
wenn nichts kommt installiere dort auch qt4 und builde deinen source....
so dass php zugreifen kann.... wenn version 4 oder mehr kommt hast du sicher alles bereits auf dem server....

Verfasst: 9. März 2007 09:20
von webmaster1987
So vielen Dank hab es jetzt geschafft den Treiber verfügbar zu machen :P

Ich habe mir ein Paket mit den nötigen Dateien Runtergeladen und in das Qt Verzeichnis gepackt und anschließend mit dem oben genannten Befehl Kompiliert.

Jetzt geht es allerdings hat es fast 4 stunden gedauert bis alles fertig war :roll:

Hab noch ne Frage wegen der Durchführbarkeit der ganzen Geschichte aber das gehört nicht mehr hier hin, sondern mehr nach hier: http://www.qtforum.de/forum/viewtopic.php?p=19231