Qt ~ QMYSQL Driver su Windows
-
Buonasera, dopo una giornata intera a cercare di connettermi ad un semplice MySql server in locale sono abbastanza affranto. Mi sono accostato a qt per necessità universitarie, risparmiandovi tutta la trafila di OpenCV di cui non sono venuto per nulla a capo, ho deciso di partire da qualcosa di semplice, mi collego a un db in locale e stampo un paio di record. Sarà facile, ed invece no, perchè scopro che i driver per il db MySql, i piu usati al mondo non ci sono e vanno scaricati\installati\compilati?
Ok, mi rimbocco le maniche.
Ho installato Visual Studio 2010 Ultimate x86 scaricato da dreamspark con account studente
Ho QT 5.1.1 x86 (non openGL) e relativo QtCreator
Gli esempi compilano bene, quindi magari va bene.Seguo la guida ''ufficiale'' da http://qt-project.org/doc/qt-4.8/sql-driver.html#how-to-build-the-mysql-driver-for-mingw-users
How to Build the QMYSQL Plugin on Windows ecc...
il codice che inserisco nella console qt è
C:\Qt\Qt5.1.1\5.1.1\Src\qtbase\src\plugins\sqldrivers\mysql>
qmake "INCLUDEPATH+=C:\QT\MYSQL\include" "LIBS+=C:\QT\MYSQL\lib\opt\libmysql.dll" mysql.prodove i path son specifici del mio pc, premo invio e non succede NULLA, e il comando 'nmake' suggerito da errore...
Ho cercato video di youtube, ne ho trovato uno in russo e ci ho capito ben poco.
Ho cercato in questo forum e ho trovato un post solo su macinsomma, non ne sono venuto a capo, mi sembra assurdo che per connettersi ad un comunissimo db mysql si debba compilare localmente le librerie. Forse sbaglio.
Vi sarei grato se potreste spiegarmi come fare.
Sono sincero ma non sono sicuro manco delle variabili d'ambiente che ho settato sul pc, ho messo quelle che mi sembravano corrrette.Grazie per la vostra attenzione. Resto a disposizione per chiarimenrti
-
Ciao,
i driver di MySQL non sono precompilati perché la compilazione dipende dalla libreria che si trova installata sul sistema e, soprattutto, dal compilatore che si vuole utilizzare; inoltre ci sono anche problemi di licenze.
In ogni caso dovresti dare maggiori informazioni circa i messaggi di errore che vedi a video.
Ciao
-
Si certo, anche se per esempio su java il driver c'è (si lo so che c'è la jvm eccetra ma dopo2 giorni persi sono un po frustrato), comunque non è questo il problema.
Incollo i file .pro e l'error log.
Alla prima compilazione non trovava il mysql.h, gli ho messo il path assoluto al file
@#include "C:\Qt\m\include\mysql.h"@e di botto mi ha stao tutti sti errori, forse mi manca qualche path, qualli attivi sono i seguenti:
!http://i.imgur.com/Fhsi51W.png(Path)!grazie per l'attenzione
@TARGET = qsqlmysql
SOURCES = main.cpp
OTHER_FILES += mysql.json
include(../../../sql/drivers/mysql/qsql_mysql.pri)PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
LIBS += C:\Qt\m\lib\libmysql.lib
INCLUDEPATH += C:\Qt\m\includeinclude(../qsqldriverbase.pri)
@@17:10:49: Running steps for project mysql...
17:10:49: Configuration unchanged, skipping qmake step.
17:10:49: Starting: "C:\Qt\Qt5.1.1\Tools\QtCreator\bin\jom.exe"
C:\Qt\Qt5.1.1\Tools\QtCreator\bin\jom.exe -f Makefile.Debug all
cl -c -nologo -Zm200 -Zc:wchar_t -Zi -MDd -GR -W3 -w34100 -w34189 -DUNICODE -DWIN32 -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_NO_EXCEPTIONS -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtSql" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtSql\5.1.1" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtSql\5.1.1\QtSql" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtCore" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtCore\5.1.1" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtCore\5.1.1\QtCore" -I".moc\debug_shared" -I"........\mkspecs\win32-msvc2010" -Fo.obj\debug_shared\ @C:\Users\CENTRA~1\AppData\Local\Temp\main.obj.8032.16.jom
main.cpp
cl -c -nologo -Zm200 -Zc:wchar_t -Zi -MDd -GR -W3 -w34100 -w34189 -DUNICODE -DWIN32 -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_NO_EXCEPTIONS -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtSql" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtSql\5.1.1" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtSql\5.1.1\QtSql" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtCore" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtCore\5.1.1" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtCore\5.1.1\QtCore" -I".moc\debug_shared" -I"........\mkspecs\win32-msvc2010" -Fo.obj\debug_shared\ @C:\Users\CENTRA~1\AppData\Local\Temp\moc_qsql_mysql_p.obj.8032.16.jom
moc_qsql_mysql_p.cpp
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(91) : warning C4005: 'AF_IPX': ridefinizione macro
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(460): vedere la precedente definizione di 'AF_IPX'
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(131) : warning C4005: 'AF_MAX': ridefinizione macro
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(479): vedere la precedente definizione di 'AF_MAX'
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(168) : warning C4005: 'SO_DONTLINGER': ridefinizione macro
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(402): vedere la precedente definizione di 'SO_DONTLINGER'
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(212) : error C2011: 'sockaddr': ridefinizione tipo 'struct'
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(485): vedere la dichiarazione di 'sockaddr'
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(390) : error C2059: errore di sintassi: 'constant'
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(390) : error C3805: 'constant': token imprevisto. Previsto '}' o ','.
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(524) : warning C4005: 'IN_CLASSA': ridefinizione macro
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(287): vedere la precedente definizione di 'IN_CLASSA'
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(530) : warning C4005: 'IN_CLASSB': ridefinizione macro
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(293): vedere la precedente definizione di 'IN_CLASSB'
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(536) : warning C4005: 'IN_CLASSC': ridefinizione macro
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(299): vedere la precedente definizione di 'IN_CLASSC'
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(547) : warning C4005: 'INADDR_ANY': ridefinizione macro
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(304): vedere la precedente definizione di 'INADDR_ANY'ecc... ecc..@
il resto continua qui http://pastebin.com/gZDziN2n
-
Ciao,
il fatto che tu abbia modificato il .pro ed i sorgenti vuol dire che qualcosa non va nel modo in cui lanci il qmake.
Verifica che il parametro che passi a INCLUDEPATH deve essere dove si trova il file mysql.h e quello che passi a LIBS è il percorso assoluto del file libmysql.lib
verifica il PATH dove è installato MySQL.
-
I path del file pro sono corretti, questo è poco ma sicuro.
!http://i.imgur.com/RGgooH0.png(as)!cosa intendi per "PATH dove è installato MySQL." ?
-
[quote author="maxx1985" date="1383583457"]I path del file pro sono corretti, questo è poco ma sicuro.
!http://i.imgur.com/RGgooH0.png(as)!cosa intendi per "PATH dove è installato MySQL." ?[/quote]
Anche se i PATH sono corretti, nell'output del compilatore non vedo la direttiva che include il PATH di MySQL.
IN ogni caso dovresti
ripristinare il sorgente modificao e il pro alla versione originale
rilanciare qmake con "INCLUDEPATH+=..." "LIBS+=..." corretti
verificare output
lanciare nmake
-
Ho ripristinato il file mysql e rimesso l'include a mysql.h
il file pro è il seguente
@TARGET = qsqlmysql
SOURCES = main.cpp
OTHER_FILES += mysql.json
include(../../../sql/drivers/mysql/qsql_mysql.pri)PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
LIBS += C:\Qt\m\lib\libmysql.lib
INCLUDEPATH += C:\Qt\m\include
@dando il make, mi dice dinuovo che manca mysql.h
sono andato in projects > build environment
e in include ho aggiunto C:\Qt\m\include ed in lib ho aggiunto C:\Qt\m\lib\libmysql.lib faccio make e dinuovo sotto i 188 errori.@21:05:17: Starting: "C:\Qt\Qt5.1.1\Tools\QtCreator\bin\jom.exe"
C:\Qt\Qt5.1.1\Tools\QtCreator\bin\jom.exe -f Makefile.Debug all
cl -c -nologo -Zm200 -Zc:wchar_t -Zi -MDd -GR -W3 -w34100 -w34189 -DUNICODE -DWIN32 -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_NO_EXCEPTIONS -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtSql" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtSql\5.1.1" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtSql\5.1.1\QtSql" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtCore" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtCore\5.1.1" -I"C:\Qt\Qt5.1.1\5.1.1\msvc2010\include\QtCore\5.1.1\QtCore" -I".moc\debug_shared" -I"........\mkspecs\win32-msvc2010" -Fo.obj\debug_shared\ @C:\Users\CENTRA~1\AppData\Local\Temp\main.obj.11868.16.jom
main.cpp@ho già provato a reinstallare qt.
non ho idee :( -
Ho seguito un tutorial che lo faceva direttamente tramite qt-creator senza andare per riga di comando
cosa dovrei scrivere nella console?
scusa la ''niubbagine'' ma sinceramente nn sono avezzo a ste cose voglio programmare, non combattere con l'ide :V
Se hai un tutorial dettagliato anche in inglese sarei felice di seguirlo, sul web ho trovato solo vaghe liste puntate.
-
Ciao,
il tutorial che ho sempre seguito io è questo
http://qt-project.org/doc/qt-4.8/sql-driver.html#how-to-build-the-qmysql-plugin-on-windowsdevi lanciare il comando indicato sostituendo i PATH dell'esempio con quelli della tua piattaforma.
Cmq "programmare" vuol dire anche combattere con gli IDE :D
-
Con i miei colleghi d'università abbiamo correttamente compilato opencv, ma per mysql nulla!
Abbiamo pazientemente aggiunto tutti gli include mancanti e le variabili d'ambiente,
RC.EXE
CL.ECEPoi i path del file stddef,h, poi winver.h poi qualcos'altro poi windows.h
adesso in pratica se compilo dalla console di Qt compare questo
!http://i.imgur.com/5zxTtf8.png(qt)!nella console di visual studio questo
!http://i.imgur.com/qDsOMYg.png(vs)!e sulla console standard di windows
!http://i.imgur.com/mt91tkx.png(win)!i path aggiunti in compilazione sono
INCLUDEPATH+="C:\Qt\c\include"
INCLUDEPATH+="C:\Progra~2\Micros~2.0\VC\include"
LIBS+="C:\Qt\c\lib\libmysql.lib"
INCLUDEPATH+="C:\Progra~2\MIA713~1\Windows\v7.0A\Include"In nomi in 8.3 son necessati altrimenti non trova i percorsi e gli errori cambiano diventando, non ho trovato stddef,h o non ho trovato winver.h
e così via...
in laboratorio abbiam provato su altri pc usati per sviluppo con vs e stessi problemi. Non ho idee...
-
oh, alla fine ne son venuto a capo.
La guida VS del sito non centra nulla, non da informazioni, da così tanto per scontato che tanto vale potevano scrivere ''buona fortuna''.
Credo che preparerò un video per far vedere che fare.
Comunque in sintesi:Prima di tutto, va scaricata ed estratta questa versione di MYSQL
mysql-noinstall-5.1.72-win32.zip la si trova sul sito mysql, estraetelo da qualche parte
Assicurarsi che i path d'ambiente contengano i link a:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin
C:\Qt\483\bin
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE
_C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools_bisogna aprire con il pannello di comando (x86) di visual studio la dir
C:\Qt\483\src\plugins\sqldrivers\mysql
(controllando il vostro path e accertandosi che NON CI SIANO SPAZI NEI PERCORSI in caso ce ne siano o spostate i setup o usate i path 8.3 (PROGRA~1 per intenderci) potete trovarli facendo dir /x da dos)Fatto questo lanciare i seguenti comandi nella dir appena raggiunta
qmake "INCLUDEPATH+=C:\Qt\mysql1\include" "LIBS+=-LC:\Qt\mysql1\lib\opt\ -llibmysql" mysql.pro
nmake
nmake release
prendere i file compilati sia dalla cartella debug che dalla cartella release
e metterli inC:\Qt\483\plugins\sqldrivers
e allora dovrebbe andare.
Ho scritto un sunto di fretta, credo non sia difficile capire quali sono le BASEDIR dei vari setup.
Appena preparo untutorial piu completo lo posto.
Grazie dell'interesse -
Ciao,
grazie per le info e complimenti per l'impegno che ci hai messo.
Volevo però sottolineare che i problemi che tu hai avuto dipendono da:- versione di MySQL
- bug del prompt di Windows che da problemi con i PATH con spazi (in realtà io ODIO i path con gli spazi).
Entrambi i problemi NON dipendono da Qt e quindi il tutorial, che è scritto in maniera generica, non è sbagliato; ti garantisco che seguendo il tutorial con MinGW tutto OK.
In ogni caso "tutto è bene quel che finisce bene".
Enjoy Qt
-
Mi son preso la briga di riscrivere la guida con maggiore dovizia di dettagli ed in inglese nella sezione trubleshooting del sito, spero di aiutare anche gli altri a risolvere questo antipatico problema.
Ecco il link http://qt-project.org/forums/viewthread/34967/