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.pro

    dove 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 mac

    insomma, 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\include

    include(../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 :(



  • Scusa ma non capisco perche modifiche a mano il file PRO

    devi passare quei parametri a linea di comando di qmake



  • 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-windows

    devi 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.ECE

    Poi 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...



  • Ciao,

    purtroppo io non ho VS ma con MinGW non ho docuto assolutamente modificato nulla!

    IL tutorial è completo e funziona; prova a non usare l'IDE.
    Usa il prompt di comandi e passa le informazioni sulla riga di comando a qmake.



  • 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 in

    C:\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/


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.