Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Spanish
  4. Hacer consultas Sql en una función de otra clase en Qt C++
Qt 6.11 is out! See what's new in the release blog

Hacer consultas Sql en una función de otra clase en Qt C++

Scheduled Pinned Locked Moved Spanish
2 Posts 2 Posters 1.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • JREMIROMEROJ Offline
    JREMIROMEROJ Offline
    JREMIROMERO
    wrote on last edited by JREMIROMERO
    #1

    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 cuestión es lo siguiente, quiero hacer una consulta en una función o método en otra clase, y después llenar el QTableView, yo en VB.net acostumbraba a pasar el control como un parámetro ejemplo:

    En el Formulario:

    Dim Consultar as Clase_Consulta()

    Consultar.clientes(ListView)

    En la Clase:

    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

    class Conexiones
    {
    public:

    bool Conectar();
    QSqlQueryModel model();


    conexiones.cpp

    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

    void MainWindow:: Conectar_TableView(){

    Conexiones *conec = new Conexiones();
    ui->tableView->setModel(*conec->model());

    }


    Pero el compilador me da error "no match for operator" en ui->tableView->setModel(*conec->model());, que estoy haciendo mal, o si hay una manera mejor de hacerlo, de antemano gracias

    1 Reply Last reply
    0
    • juankiJ Offline
      juankiJ Offline
      juanki
      Moderators
      wrote on last edited by
      #2

      Hola

      Cuando haces setModel, tienes que quitar el asterisco, ya que ese método espera recibir un puntero. Y tienes que modificar también el método model de la clase Conexiones, ya que, aunque retorna un puntero, tu la has declarado que retorna un objeto de la clase QSqlQueryModel, por lo que también te dará error.

      En ese método tendrás también otro error o aviso y es que has metido el return dentro de la comprobación connectar== true. ¿Y si es false, qué retornas? Además, yo creo que esa comprobación está mal planteada, tendrías que hacerla justo antes de hacer el setModel, algo así:

      Conexiones *conec = new Conexiones();
      if(conec->hayConexion()) { // tendrías que crear ese método
          ui->tableView->setModel(conec->model());
      } else {
       // mostrar un aviso o un error al usuario
      }
      

      Personalmente, todas esas comprobaciones, si hay acceso a la base de datos y demás, las suelo hacer en el main, antes de crear la ventana principal, y si hay algún error o no se puede conectar, pues en vez de mostrar el MainWindow, pues muestro un mensaje de error y el programa termina.

      Un saludo

      Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
      Procura escribir correctamente y sin faltas de ortografía.

      Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved