| Subcribe via RSS

QT+Mysql (3ª parte): Conectando a una base de datos MySQL

Junio 23rd, 2006 | No Comments » | Posted in mysql, qt

Siguiendo con este minicurso de utilización de MySQL con QT vamos a ver un ejemplo de cómo conectar a una base de datos MySQL:

#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QLabel resultado("");
    if (QSqlDatabase::isDriverAvailable("QMYSQL")) {
        QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
        db.setHostName("localhost");
        db.setDatabaseName("nombreBD");
        db.setUserName("usuarioBD");
        db.setPassword("claveBD");
        if ( db.open() )
           resultado.setText("Bien, base de datos cargada");
        else {
             QSqlError mensaje = db.lastError();
            resultado.setText(mensaje.text());
            }
    }
    else
        resultado.setText("No hay driver");
    resultado.show();
    return app.exec();
}

No creo necesario indicar (pero por si acaso lo hago) que hay que sustituir los valores: nombreBD, usuarioBD y claveBD por los valores adecuados.

Se puede indicar al programa que se conecte a un puerto diferente del habitual mediante:

        db.setPort(3306);

QT+MySQL (2ª parte): Comprobar si está disponible el driver MySQL para QT

Junio 22nd, 2006 | No Comments » | Posted in mysql, qt

Una sencilla aplicación que nos permite comprobar si está disponible el driver MySQL para usarlo con QT.

#include 
#include 
#include 
#include 
#include 

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QLabel resultado("");
    if (QSqlDatabase::isDriverAvailable("QMYSQL")) {
       resultado.setText("Driver Mysql disponible");
    }
    else
        resultado.setText("Mala suerte, driver Mysql NO disponible");
    resultado.show();
    return app.exec();
} 

y para compilar no hay que olvidar editar el fichero *.pro y añadir la línea:

qt += sql

En este sencillo programa todo el trabajo importante recae sobre la función estática isDriverAvailable (de la clase QSqlDatabase), que es la que comprueba si está disponible el driver.

QT+MySQL (1ª parte): Compilar el driver MySQL para QT Windows

Junio 21st, 2006 | 1 Comment | Posted in mysql, programacion, qt

Si usas la versión de Windows XP de la QT seguramete habrás descubierto que el driver para MySQL no viene “de serie” por lo que es necesario compilarlo.

El problema a la hora de compilarlo es que las librerías libmysql.dll y libmysql.lib están compiladas con el compilador de Microsoft y no son compatibles con el compilador MinGW (el compilador para el que vienen preparadas las QT Open Edition). De tal forma que cuando intentemos crear nuestro driver nos encontraremos con un simpático mensaje similar a éste:

tmpobjrelease_sharedqsql_mysql.o(.text+0x4273):qsql_mysql.cpp: undefined refe
rence to `mysql_init@4'
tmpobjrelease_sharedqsql_mysql.o(.text+0x436e):qsql_mysql.cpp: undefined refe
rence to `mysql_real_connect@32'
tmpobjrelease_sharedqsql_mysql.o(.text+0x441d):qsql_mysql.cpp: undefined refe
rence to `mysql_select_db@8'
tmpobjrelease_sharedqsql_mysql.o(.text+0x449d):qsql_mysql.cpp: undefined refe
rence to `mysql_get_client_version@0'
tmpobjrelease_sharedqsql_mysql.o(.text+0x44b7):qsql_mysql.cpp: undefined refe
rence to `mysql_get_server_version@4'
tmpobjrelease_sharedqsql_mysql.o(.text+0x4642):qsql_mysql.cpp: undefined refe
rence to `mysql_close@4'
...
collect2: ld returned 1 exit status
mingw32-make[1]: *** [........pluginssqldriversqsqlmysql.dll] Error 1
mingw32-make[1]: Leaving directory `C:/Qt/4.1.3/src/plugins/sqldrivers/mysql'
mingw32-make: *** [release] Error 2

Afortunadamente existe una solución: convertir las librerías a un formato válido para MinGW. Esto se hace con unos sencillos pasos:


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

(*) reimp viene en el paquete “MinGW-utililities”, que puede encontrarse en: http://sourceforge.net/project/showfiles.php?group_id=2435

(**) se supone que MySQL está instalado en (c:\mysql)

Ahora tenemos una librería llamada libmysql.a compatible con MinGW, ya sólo nos queda compilar el driver Mysql. Ahora podemos hacerlo tal y como se indican en las instrucciones de las QT:

  1. cd c:\qt\src\plugins\sqldrivers\mysql
  2. qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE"  "LIBS+=-LC:\MYSQL\LIB\OPT -lmysql"  mysql.pro
  3. make (por si acaso haz un “make clean” antes de make).

¡Listo! ya podemos disfrutar de nuestro nuevo y flamante driver para MySQL.

Fuente: Foros de las QT (un buen sitio para resolver tus dudas).

Ten en cuenta que la librería libmysql.dll (C:\mysql\lib\opt\libmysql.dll) tiene que estar disponible para el programa (tiene que estar en la variable PATH o en el mismo directorio que nuestro programa). En caso contrario el driver no se cargará correctamente.