Esta es la versión portada a PostgreSQL de la popular base de datos de ejemplo Northwind que ofrece Microsoft en su sitio web
Te la puedes descargar de aqui:
https://drive.google.com/open?id=0B9uuluhrKpGKeHdLTHkxR1QzQXc
host all all IP_DEL_EQUIPO/24 trustDonde IP_DEL_EQUIPO es la IP del servidor que corre PostgreSQL
host all all 192.168.1.10/24 trust
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;
#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
#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QSqlDatabase>
#include <QStringList>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "Available drivers: " << QSqlDatabase::drivers();
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
qDebug() << "addDatabase() " << (db.isValid() ? "VALID" : "ERROR");
return a.exec();
}
Aqui pongo un ejemplo más pulido:
passwd postgres
(luego introducimos la clave)
Luego debes comentar con # todas las entradas de
/var/lib/pgsql/data/pg_hba.conf y añadir al final
#TYPE DATABASE USER CIDR-ADDRESS METHOD# "local" is for Unix domain socket connections onlylocal all all ident# IPv4 local connections:host all all 127.0.0.1/32 md5host all all 127.0.0.1/32 md5# IPv6 local connections:host all all ::1/128 md5
Así quedó en mi terminal: |