Enciclopedia e Dizionari

 
ENCICLOPEDIA
cerca:  
   
 
DIZIONARIO di ITALIANO
cerca:  
   
 
DIZIONARIO di INGLESE
cerca:  
Inglese - Italiano  
Italiano - Inglese  

Treddi.com - News

THG News - Novità dal mondo della tecnologia

Powered By Blogger

Informazioni personali

mercoledì 9 febbraio 2011

PostHeaderIcon Driver PostgreSQL 9.0 e MySQL per Qt 4.7 sotto windows

Ultimamente mi è tornata voglia di confrontarmi con la programmazione in c++. Non volendo affidarmi ai soliti pacchetti Microsoft che, pur essendo anche in versione free (visual studio express), mi danno sempre l'orticaria, ho scelto per il pacchetto QT della Nokia che in versione LGPL fornisce gli strumenti di sviluppo multipiattaforma (Win, Linux e MACOS). Mentre le mie sinapsi si stanno rimettendo in moto con i concetti di programmazione ad oggetti, librerie dinamiche e non statiche, c++ ecc. ed avendo a che fare con Postgresql e MySQL ho dovuto cercare di capire come compilare i drivers che QT utilizza per la programmazione in C++ dei DB. E qui ho visto i sorci verdi!
Cercando tra i vari forum tematici (QTCentre.org ad esempio...) ho scoperto che le cose sono spesso più semplici di come la documentazione ufficiale ci indica. Nel caso specifico se sfogliamo le QT Reference Documention sui driver per SQL vengono indicati dei passi per la comilazione con l'nmake della Microsoft e non la "libera" MingW. A parte la semplice sostituzione di nmake con un bel mingw32-make le cose non hanno funzionato per niente. Ho incominciato a capire qui e qui (ovviamente non conosco il polacco ma Google translator aiuta un pochino...:-P). Di seguito vi riassumo i passi necessari.
La cosa importante è ricordare che sia per postgresql che mysql non è necessario installare i server a meno che non siano da utilizzare sulla macchina di sviluppo (personalmente preferisco sempre avere a che fare con server "remoti", anche virtuali, in modo da non sovraccaricare di servizi il pc quando non serve). Una volta scaricate le versioni zippate (postgresql-9.0.3-1-windows-binaries.zip e mysql-5.5.9-win32.zip) senza installer dei due DB, le scompattiamo direttamente in c:. Nel mio caso ho c:\QT, c:\pgsql e c:\mysql-5.5.9-win32 con tutte le loro sottocartelle.
Nella cartella

C:\Qt\2010.05\qt\src\plugins\sqldrivers

esistono tutte le cartelle con i sorgenti per la creazione dei driver SQL necessari. Per PostgreSQL da QTCreator entrate in psql ed aprite il project psql.pro. Aggiungete le seguenti due righe:


INCLUDEPATH += C:/pgsql/include
LIBS += C:/pgsql/lib/libpq.lib


in modo da indicare dove sono sia gli include che la libreria libpq.lib. Trasformate il progetto in release e dal menu Build scegliete "Build All". Se tutto procede come si deve, nella cartella C:\Qt\2010.05\qt\plugins\sqldrivers troverete 4 nuovi file:

qsqlpsqld4.dll
qsqlpsql4.dll
libqsqlpsqld4.a
libqsqlpsql4.a

che sono i driver necessari al QTCreator per farvi lavorare con PostgreSQL. Ma non finisce qui. Per farsì che tutto sia "visibile e funzionante" dobbiamo copiare tutte le dll presenti in c:\psql\bin (per la versione di PostgreSQl 9.0.3 sono 9) in c:\QT\2010.05\qt\bin e aggiungere nella path di sistema il riferimento a questa cartella. Quest'ultimo passaggio è quello che mi ha lasciato perplesso. In due installazioni diverse ho avuto due risposte differenti. In una è stato necessario aggiungere la path, nell'altro non lo è stato. Ad ogni modo per verificare che i drivers siano caricati da QT è sufficiente eseguire il seguente programmino in modalità release:

#include "QtCore/QCoreApplication"
#include "QtSql"
#include "QDebug"

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

qDebug() << QSqlDatabase::drivers();

return a.exec();
}

che dovrebbe rispondere:

("QSQLITE", "QMYSQL3", "QMYSQL", "QODBC3", "QODBC", "QPSQL7", "QPSQL")


Per MySQL ci dobbiamo muovere nello stesso modo.
1- Aprire da QT il file C:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\mysql.pro
2- Aggiungere due righe:

INCLUDEPATH += C:/mysql-5.5.9-win32/include
LIBS += C:/mysql-5.5.9-win32/lib/libmysql.lib

3- Eseguire il "Build all" in release mode
4- verificare la presenza in C:\Qt\2010.05\qt\plugins\sqldrivers\ di 4 file:

qsqlmysqld4.dll
qsqlmysqld.dll
libqsqlmysqld4.a
libqsqlmysql4.a

5- copiare da C:\mysql-5.5.9-win32\lib libmysql.dll in C:\Qt\2010.05\qt\bin.

Se volessimo eseguire i nostri programmini fuori da QT nella cartella dell'eseguibile le libreire giuste. Ad esempio, nel caso del programmino che ho inserito sopra per vedere quali drivers sono disponibili è sufficiente avere i seguenti file:

libgcc_s_dw2-1.dll
mingwm10.dll
eseguibile.exe
QtCore4.dll
QtSql4.dll

Nel caso in cui volessimo interrogare PostgreSQL, invece:

iconv.dll
libeay32.dll
libgcc_s_dw2-1.dll
libiconv-2.dll
libintl-8.dll
libpq.dll
libxml2.dll
libxslt.dll
mingwm10.dll
QtCore4.dll
QtGui4.dll
QtSql4.dll
eseguibile.exe
ssleay32.dll
zlib1.dll


Conclusioni

Alla fine la documentazione è sempre carente, con ogni apllicativo e meno male che esistono le communities!

0 commenti:

Archivio blog