domingo, 8 de febrero de 2015

Ejemplo Qt5 + Postgres

En la entrada anterior expliqué como se configuraba fedora para conectar qt5 con postgres. Ahora aquí se muestra un ejemplo de una aplicación en Qt que se conecta con una BD en postgres.

Primero creamos la BD de ejemplo desde pgadmin3. En este caso se llama BD_UNEG


CREATE DATABASE "BD_UNEG"
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'es_VE.UTF-8'
       LC_CTYPE = 'es_VE.UTF-8'
       CONNECTION LIMIT = -1;
-- Table: persona

CREATE TABLE persona
(
  cedula character varying(20) NOT NULL,
  nombre character varying(50),
  tipo character varying(30),
  estatus character varying(30),
  carrera character varying(30),
  CONSTRAINT persona_pkey PRIMARY KEY (cedula)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE persona
  OWNER TO postgres;

qt postgres

Quedaría así


Ahora agrega algo a la BD. 



NOTA: En este ejemplo la clave de postgres es 123456 y el puerto es 5432

Este es el código en Qt que busca todos los elementos de la tabla persona y los muestra

#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlError>
#include <QStringList>
#include <QMessageBox>
#include <QSqlQuery>
#include <QSqlRecord>

bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("127.0.0.1");   // Nombre del host
    db.setDatabaseName("BD_UNEG"); // Nombre de la BD
    db.setPort(5432);              // Puerto
    db.setUserName("postgres");    // Usuario
    db.setPassword("123456");      // Contraseña

    // Si esta abierto entonce retorna true
    if (db.isOpen()){
        qWarning() <<"La conexión ya estaba creada";
        return true;
    }

    // Abre la BD
    if (!db.open()) {
        QMessageBox::critical(0, QObject::tr("Database Error"),
                              db.lastError().text());
        return false;
    }
    return true;
}

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

    qDebug() << (createConnection() ? "Se crea la conexión :)" : "ERROR al conectar :(");

    QSqlQuery qry;

    qry.prepare( "SELECT * FROM persona" );
     if( !qry.exec() )
       qDebug() << qry.lastError();
     else
     {
       qDebug( "Seleccionado!" );
       QSqlRecord rec = qry.record();
       int cols = rec.count();
       for( int c=0; c<cols; c++ )
         qDebug() << QString( "Columna %1: %2" ).arg( c ).arg( rec.fieldName(c) );

       for( int r=0; qry.next(); r++ )
         for( int c=0; c<cols; c++ )
           qDebug() << QString( "Fila %1, %2: %3" ).arg( r ).arg( rec.fieldName(c) ).arg( qry.value(c).toString() );
     }

    return a.exec();
}





Recuerda agregar QT += sql en el fichero .pro



Links de interes:
http://www.informit.com/articles/article.aspx?p=1405550


http://www.java2s.com/Code/Cpp/Qt/ConnecttoMySqlwithQSqlDatabaseanddoselectupdateinsertanddelete.htm


http://www.ics.com/designpatterns/solutions/qsqldatabase.html

1 comentario: