QT - No me devuelve Consulta Sql Postgres

   
Vista:

No me devuelve Consulta Sql Postgres

Publicado por Cool_Zero (12 intervenciones) el 06/03/2016 18:09:05
Estoy haciendo una prueba solamente para saber como funciona, quiero consultar la tabla Usuario y quiero rellenar QTableWidget el resultado

**********************Dialog_Login.h*****************************
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <QDialog>
#include <QtSql>
#include <QSqlDatabase>
 
class Dialog_Login;
}
 
class Dialog_Login : public QDialog
{
    Q_OBJECT
 
public:
    explicit Dialog_Login(QWidget *parent = 0);
    ~Dialog_Login();
 
  void Rellenar_Usuarios();
  QSqlQueryModel *Modelo1;
  QSqlDatabase db;

****************************Dialog_Login.cpp*****************************************

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
41
42
43
44
45
46
47
48
49
50
void Dialog_Login::Rellenar_Usuarios()
{
 
 
    db = QSqlDatabase::addDatabase("QPSQL");
    db.setDatabaseName("*******");
    db.setHostName("********");
    db.setUserName("*****");
    db.setPassword("*****");
    db.setPort(5432);
 
 
 
 
 
    if(db.open())
 
    {
        QSqlQuery query;
 
 
 
          query.exec("SELECT id_usuario FROM Usuario");
 
          ui->tableWidget->setRowCount(1);
 
                     ui->tableWidget->setColumnCount(1);
                     ui->tableWidget->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
 
 
                     ui->tableWidget->setHorizontalHeaderLabels(QString("Usuarios").split(";"));
 
                 int i=0;
                 while (query.next()) {
 
 
                   ui->tableWidget->setItem(i,0,new QTableWidgetItem(query.value(1).toString()));
 
 
                      i++;
                 ui->tableWidget->insertRow(i);
 
    }
}
}
 
void Dialog_Login::on_pushButton_2_clicked()
{
      Rellenar_Usuarios();
}




No me devuelve nada, solamente me llena las columnas pero no me devuelve ningun valor, que estoy haciendo mal?
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

No me devuelve Consulta Sql Postgres

Publicado por juanki (67 intervenciones) el 06/03/2016 22:53:55
Hola

Antes de mirar siquiera el código, una pregunta ¿Te carga el driver de bases de datos correctamente? ¿No obtienes ningún mensaje de error? Te lo digo por que aunque Qt no pueda cargar el driver de bases de datos continúa con la ejecución del programa, pero obviamente las consultas que hagas no te devolverán nada.

Si ejecutas el programa desde QtCreator, en el log de salida de la aplicación obtendrás todos los errores y sabrás si se cargó el drivers correctamente.

Y una recomendación ¿Porqué no usas QTableView? Junto a un modelo te facilita mucho mostrar datos procedentes de una base de datos.

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 me devuelve Consulta Sql Postgres

Publicado por Cool_Zero (12 intervenciones) el 07/03/2016 00:24:58
Ya intente usar QTableView pero nada, creo que si me carga el driver, ya que la condición if (db.open()) ui->tableWidget->setHorizontalHeaderLabels(QString("Usuarios").split(";")); si se cumple, y no me aparece ningun mensaje de error

Y cuando trato de usar el proyecto de ejemplo de sqlbrowser si me conecta, y me lee lo que esta dentro de cada tabla, lo que pasa es que ese codigo lo veo un poco engorroso y no lo entiendo muy bien por eso no lo aplico
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 me devuelve Consulta Sql Postgres

Publicado por juanki (67 intervenciones) el 07/03/2016 20:48:40
Hola

Pues el problema puede que sea tan sencillo como que no estás leyendo el valor adecuado de la consulta. En la línea:
ui->tableWidget->setItem(i,0,new QTableWidgetItem(query.value(1).toString()));

Estás accediendo el elemento 1 de la consulta, pero en tu consulta solo cargas una columna (id_usuario), por lo que el primero es el 0 (cero) no el uno, por lo tanto estás leyendo un dato que no existe y no te retorna nada. Con cambiar ese 1 por un cero creo que debería mostrarte algo.

Ahora bien, un detalle de tu código, estás creando una conexión con la base de datos cada vez que pulsas el botón y eso no es lo adecuado. Lo ideal es que la conexión la hagas una vez, yo suelo hacerlo en el main, así compruebo si hay algún error antes de mostrar la ventana al usuario. Por lo tanto deberías mover ese trozo de código al main o a otro lugar que se ejecute una sola vez y en el método "Rellenar_Usuarios" usar el método database para obtener una conexión.

Otro pequeño detalle es que has creado el slot para conectar el botón en el cual tan solo llamas al método "Rellenar_Usuarios",podrías crear ese método directamente como un slot y te ahorras el método on_pushButton_2_clicked. Y, ya puestos, aunque es un ejemplo (soy muy maniático con estas cosas), acostúmbrate desde el principio a dar nombres descriptivos a todo. Imagina que tienes 5 botones, ¿Cual era el 2? Si le pones un nombre adecuado a lo que hace, no necesitarás mirar cual era.

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 me devuelve Consulta Sql Postgres

Publicado por Cool_Zero (12 intervenciones) el 15/03/2016 03:48:12
Ya esta el problema es el nombre de la tabla, recuerda que postgresql es muy sensible a las mayusculas, como estoy tratando de migrar la BD de Sql server a PostgreSql, era un problema por eso, no tuve que cambiar nada mas en el codigo, solo colocar el nombre de la tabla en minuscula ("SELECT id_usuario FROM Usuario" por "SELECT id_usuario FROM usuario"), y tambien modificarla en la base de datos, una tonteria!! Una conchita de mango como decimos en Venezuela, de todas maneras gracias
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