QT - Hacer consultas Sql en una funcion de otra clase en Qt C++

 
Vista:
sin imagen de perfil

Hacer consultas Sql en una funcion de otra clase en Qt C++

Publicado por Jose Remigio (12 intervenciones) el 09/02/2016 17:19:26
Hola buen dia, estoy aprendiendo a programar con qt, no estoy muy familiarizado con c++, sin embargo la entiendo un poco mas que java. La cuestion es lo siguiente, quiero hacer una consulta en una funcion o metodo en otra clase, y despues llenar el QTableView, yo en VB.net pasaba el control como un parametro ejemplo:


En el Formulario:

1
2
3
Dim Consultar as Clase_Consulta()
 
Consultar.clientes(ListView)

En la Clase:

1
2
3
Public sub clientes(ByVal ListView1 as ListView)
 
****BLA BLA BLA

Ahi podia hacer la consulta y llenar el control

Estuve investigando por internet la forma de hacer esto en Qt, claro en QTableView y he visto que esta no es la forma correcta de utilizar las clases, seria mejor crear una funcion que te devuelva esos datos y LLENARLO EN FORMULARIO "NO EN LA CLASE", ahora como podria hacer esto? intente hacer esto:


conexiones.h

1
2
3
4
5
6
7
class Conexiones
{
public:
    Conexiones();
 
   bool Conectar();
   QSqlQueryModel model();


conexiones.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
bool Conexiones::Conectar()
{
   int retornar;
    QString servername ="****";
    QString dbname ="****";
    QString LoginN= "****";
    QString Passw= "*****";
 
 
    db = QSqlDatabase::addDatabase("QODBC", "BDSCAFI");
 
    db.setDatabaseName("DRIVER={SQL Server};Server="+servername+";Database="+dbname+";Uid="+LoginN+";Port=1433;Pwd="+Passw+";WSID=");
 
    if(db.open())
    {
     retornar=true;
     db.close();
    }
    else
    {
        retornar=false;
 
     }
    return retornar;
}
 
 QSqlQueryModel Conexiones:: model(){
 
     if(conectar==true)
     {
     QSqlQueryModel *modelo = new QSqlQueryModel;
       modelo->setQuery("SELECT * FROMClientes", db);
     return modelo;
          }
 }


MainWindow.cpp

1
2
3
4
5
6
void MainWindow:: Conectar_TableView(){
 
     Conexiones *conec = new Conexiones();
     ui->tableView->setModel(*conec->model());
 
 }

Pero el compilador me da error "no match for operator", que estoy haciendo mal, o si hay una manera mejor de hacerlo, de antemano gracias
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
Val: 96
Oro
Ha mantenido su posición en QT (en relación al último mes)
Gráfica de QT

Hacer consultas Sql en una funcion de otra clase en Qt C++

Publicado por juanki (102 intervenciones) el 09/02/2016 22:33:54
Hola

Pues así, sin revisar mucho el código, diría que te sobra el asterisco que pusiste delante de conec;, el método setModel de la clase QTableView espera recibir un puntero al modelo:

1
ui->tableView->setModel(conec->model()); // sin el asterisco

Y el método model() también lo tienes que modificar, pues estás retornando un puntero, sin embargo en la declaración del método no lo estás haciendo.

Ojo: imagino que eso es solo un ejemplo, pero por si acaso, ¡¡ No te olvides de destruir los objetos !!

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

Hacer consultas Sql en una funcion de otra clase en Qt C++

Publicado por jreromero (12 intervenciones) el 11/02/2016 08:57:39
Entiendo, pues si, lo que pasa es que me estoy basando en ejemplos que veo por Internet no estoy muy familiarizado con c++, y ahorita tengo problemas con los driver de qodbc y pssql que no me lo reconoce el qt pero ese es otro tema, si usted tuviera que armar esta parte del código, como lo haría? Alguna sugerencia?? Gracias y 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: 96
Oro
Ha mantenido su posición en QT (en relación al último mes)
Gráfica de QT

Hacer consultas Sql en una funcion de otra clase en Qt C++

Publicado por juanki (102 intervenciones) el 11/02/2016 22:38:26
Hola

Bueno, el tema de los drivers de bases de datos, la verdad, es complicado, personalmente no he conseguido hacer funcionar QODBC, los únicos dos que he usado han sido el de SQLite, que es muy fácil y lo uso para proyectos pequeños y en un proyecto de más envergadura que tengo en curso uso firebird, que, la verdad, le he tenido que dar mil vueltas para que todo funcione XD

En el otro foro que posteaste te comenté algo más que aquí (estaba de viaje), míralo a ver, pero así te indico que lo que yo suelo hacer es hacer todas las comprobaciones en el "main", antes de crear la ventana principal y si hay algún error, pues muestro un aviso, salgo y no creo el MainWindow.

Pregunta todas las dudas que tengas. Te recomiendo que te mires todo lo que puedas de C++, Qt es un frameworks muy complejo y, aunque algunas tareas parece que se hacen con mucha facilidad, otras son mucho más complejas, mientras más conozcas C++, mejor.

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

Hacer consultas Sql en una funcion de otra clase en Qt C++

Publicado por jremiromero (12 intervenciones) el 12/02/2016 17:32:48
Oye y has probado con el de PostgreSQl, yo no puedo, he tratado de compilar el driver y es imposible
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: 96
Oro
Ha mantenido su posición en QT (en relación al último mes)
Gráfica de QT

Hacer consultas Sql en una funcion de otra clase en Qt C++

Publicado por juanki (102 intervenciones) el 14/02/2016 19:49:35
Hola

Pues nunca lo he usado, pero acabo de mirar y tanto en la instalación de windows como en la de linux, ambas con la versión 5.5, me viene ya compilado el driver de PostgreSQL.

De todas formas, en la web de Qt están las instrucciones de compilación:
http://doc.qt.io/qt-5/sql-driver.html#qpsql

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

Hacer consultas Sql en una funcion de otra clase en Qt C++

Publicado por jreromero (12 intervenciones) el 15/02/2016 00:24:42
Pues he hecho hasta lo imposible he reinstalado varias versiones de qt probando los archivos de ejemplos con sqlbrowser y he tratado de probar la conexion y me dice driver not loaded, ya no se que hacer!
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: 96
Oro
Ha mantenido su posición en QT (en relación al último mes)
Gráfica de QT

Hacer consultas Sql en una funcion de otra clase en Qt C++

Publicado por juanki (102 intervenciones) el 15/02/2016 19:08:06
Hola

Imagino que eres también Jose R, que acaba de preguntar lo mismo. He respondido en ese hilo.

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