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;
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
Me gustaría ver el archivo .pro
ResponderEliminargracias