QT - No puedo conectar Qt con PostgreSql

 
Vista:

No puedo conectar Qt con PostgreSql

Publicado por Jose R (12 intervenciones) el 15/02/2016 03:04:01
Al ejecutar el siguiente codigo me da un error: "DRIVER NOT LOADED"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMainWindow>
#include <QtGui>
#include <QtCore>
#include <QtSql>
#include <qmessagebox.h>
 
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    QSqlDatabase qdb = QSqlDatabase::addDatabase("QPSQL");
 
      qdb.setHostName("localhost");
      qdb.setDatabaseName("postgres");
      qdb.setUserName("*****");
      qdb.setPassword("******");
      qdb.setPort(5432);
 
      if(qdb.open())
      {
          QMessageBox msg;
                    msg.setText("Conectado");
                     msg.exec();
 
      }
      else
      {
          QMessageBox msg;
                    msg.setText("Error en Conectar");
                    msg.setInformativeText(db.lastError().text());
                    msg.exec();
 
      }
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

No puedo conectar Qt con PostgreSql

Publicado por juanki (98 intervenciones) el 15/02/2016 19:05:43
Hola

Ese es el error que da Qt cuando hay algún problema con el driver de bases de datos y, la verdad, es poco claro y no ayuda en nada.

Para empezar supongo que tienes el driver disponible, eso lo puedes comprobar usando el método drivers() de la clase QSqlDatabase, que te devuelve un QStringList con todos los drivers disponibles:

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

También tendrás instalado y funcionando correctamente PostgreSQL.

Aun estando todo lo anterior correctamente, lo más probable es que el drivers no pueda localizar algún archivo que necesita para funcionar, concretamente tendrás que copiar las librerías libeay32.dll, intl.dll, libpq.dll y ssleay32.dll, que estarán en la carpeta bin de la instalación de PostgreSQL a la carpeta C:\ruta_de_instalacion_qt\mingw\bin.

No olvides que cuando distribuyas la aplicación, también tendrás que adjuntar dichas librerías junto a tu ejecutable.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No puedo conectar Qt con PostgreSql

Publicado por Jose R. (12 intervenciones) el 15/02/2016 19:19:06
Si las copie, esos archivos estaban dentro de la carpeta de instalación de PostgreSql, el depurador me sale todos los drivers disponibles, El sistema operativo en Windows 7 64 bits, estuve leyendo en alguna parte que existe incompatibilidad con 64 bit, sera cierto esto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

No puedo conectar Qt con PostgreSql

Publicado por juanki (98 intervenciones) el 15/02/2016 22:12:11
Pues no lo sé, pudiera ser.

Yo revisaría que todo esté correcto, hace un tiempo me pasó lo mismo con firebird, terminé echándole la culpa a los 64bits, pero resultó ser que me faltaba copiar un archivo en la carpeta adecuada. Lo hice y se solucionó el "driver not loaded".

Para windows hay un programa, dependency walker, que te da una lista de las dependencias que tiene tu programa, quizás puedas usarlo para ver si te falta algo.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha disminuido su posición en 2 puestos en QT (en relación al último mes)
Gráfica de QT

No puedo conectar Qt con PostgreSql

Publicado por osvaldo (6 intervenciones) el 19/07/2016 22:56:25
primero que todo copia la direccion del bin dende se instalo el postgreSql y ir a configuracion avansada del sistema despues variables de entorno y variables de usarios para tu ususario ejemplo(osvaldo) darle nueva la vas crear con nombre PATH y abajo le pegas la direccion que copiastes anteriormente. espero que eso te funcione. Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No puedo conectar Qt con PostgreSql

Publicado por Yuliana (3 intervenciones) el 25/09/2018 17:35:16
Al ejecutar el siguiente codigo me da resultado:Process finished with exit code 0
Alguien que me ayude porfavor soy nueva en este lenguaje y de ahi no paso ya copie las librerías libeay32.dll, intl.dll, libpq.dll y ssleay32.dll, que estan en la carpeta bin de la instalación de PostgreSQL a la carpeta C:\ruta_de_instalacion_qt\mingw\bin. y nada.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
 
from PyQt4.QtSql import QSqlQuery, QSqlDatabase
 
 
# Funcion para realizar la conexion a la base de datos
def connect():
    db = QSqlDatabase.addDatabase("QPSQL", "PgSQLDb")
    db.setHostName("189.204.***.***")
    db.setDatabaseName("*****")
    db.setPort(5432)
    db.setUserName("*******")
    db.setPassword("******")
    db.open()
    return db
 
# Inicializar el objeto para hacer querys a la base de datos
    db = connect()
    # print db.open()
 
# objetos query
    query_general = QSqlDatabase(db)
    query_general.exec_("SELECT * FROM adm_perfiles;")
 
    query_size = query_general.size()
    for row in range(query_size):
        query_general.next()
 
    adm_per_id  = str(query_general.value(0).toString())
    adm_per_nom = str(query_general.value(1).toString())
    adm_per_des = str(query_general.value(2).toString())
    adm_per_res = str(query_general.value(3).toString())
    adm_pel_com = str(query_general.value(4).toString())
    print query_general
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

No puedo conectar Qt con PostgreSql

Publicado por juanki (98 intervenciones) el 25/09/2018 22:30:40
Hola

De python ni idea, además no me gusta nada :P y el error pocas pistas da. Te recomiendo que vayas mostrando por consola algunos mensajes para ver qué ocurre, por ejemplo, la clase QSqlDatabase tiene el método isOpen() que te devuelve true si la base de datos se abrió con éxito.

También puedes usar lastError() para ver los errores que ocurren.

También puedes usar el método drivers() que te devuelve una lista de los drivers de bases de datos disponibles, si no está el de PostgreSql tendrás que compilarlo:

http://doc.qt.io/qt-5/sql-driver.html#qpsql

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No puedo conectar Qt con PostgreSql

Publicado por Yuliana (3 intervenciones) el 27/09/2018 19:17:13
Te agradezco Juanki pero a lo que recomiendas que vaya consola muestre algunos mensajes para ver qué ocurre te refieres a la consola del sistema a la consola python le agradecería que diera mas ejemplos ya que son nueva y no tengo idea.
saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

No puedo conectar Qt con PostgreSql

Publicado por juanki (98 intervenciones) el 28/09/2018 10:42:47
Hola

Me refiero a mostrar datos por consola, desconozco python, pero supongo que tiene que tener una sentencia print o similar que muestre un texto. O puedes hacer uso de QDebug de Qt.

Por ejemplo, el método open() devuelve true si abrió la base de datos correctamente, por tanto puedes usarlo para mostrar un mensaje y así poder encontrar el error.

Te pongo un trozo de código en C++ para que veas lo que digo:

1
2
3
4
5
6
if(db.open()) {
    qDebug() << "Base de datos abierta";
} else {
    qDebug() << "error al abrir la base de datos";
    qDebug() << db.lastError().text();
}

Como ves, es muy fácil ir depurando el programa de esa forma, puedes usar lo mismo en otras partes de tu código hasta que encuentres lo que falla.

Un saluo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No puedo conectar Qt con PostgreSql

Publicado por Yuliana (3 intervenciones) el 28/09/2018 16:43:11
Buen Día te agradezco mucho tu ayuda, estado revisando ahora me manda este mensaje The server version of this PostgreSQL is unknown, falling back to the client version. no se que me falte instalar o mi postgresql no esta bien instalado ya no se que mas hacer para poder conectar a la base de datos con QPSQL, porque si me conecto por psycopg2 si se conecta a la base de datos.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

No puedo conectar Qt con PostgreSql

Publicado por juanki (98 intervenciones) el 28/09/2018 23:37:58
Hola

Al menos ya sabes el error que tienes. No sé que sistema operativo estás usando ni que versión de PostgreSQL, pero parece que el error va por ahí, según la documentación necesitas una versión de PostgreSQL mínima de 7.3

Revisa la instalación, también tienes que copiar una serie de archivos de PostgreSql en la carpeta de Qt, revisa este foro:

https://forum.qt.io/topic/86012/error-de-conexion-entre-qt-y-postgres/2

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar