Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Spanish
  4. Db sqlite desde un dialog

Db sqlite desde un dialog

Scheduled Pinned Locked Moved Unsolved Spanish
4 Posts 2 Posters 792 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.
  • C Offline
    C Offline
    Casino
    wrote on last edited by
    #1

    Puede ser que una db sqlite declarada en los dialogs no funcione???, Porque copié todo el procedimiento de una db que tenía en el mainwindows de otro programa y lo puse en el dialog de otro porque quería manejarla desde ese lugar, va todo bien hasta que tiene que ingresar un usuario, ahí no pasa nada y es el mismo código que uso en la otra....

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

      Hola

      La forma de acceder a la base de datos es la misma desde cualquier lugar. Puede fallar por una multitud de factores, debes ponernos el código que usas y los errores que te da para que alguien pueda ayudarte.

      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
      • C Offline
        C Offline
        Casino
        wrote on last edited by
        #3

        Acá lo mando:
        ciegas.h
        #ifndef CIEGAS_H
        #define CIEGAS_H

        #include <mainwindow.h>
        #include <QDialog>
        #include <QtSql/QSql>
        #include <QtSql/QSqlDatabase>
        #include <QtSql/QSqlQuery>
        #include <QtSql/QSqlError>
        #include <QTableWidgetItem>
        #include <QWidget>
        #include <QList>

        namespace Ui {
        class Ciegas;
        }

        class Ciegas : public QDialog
        {
        Q_OBJECT

        public:
        explicit Ciegas(QWidget *parent = nullptr);
        ~Ciegas();

        int file;
        
        
        
        void CrearTablaCiegas1();
        
        void MostrarCiegas();
        
        void insertarCiegas();
        
        void on_Ciegas1_itemClicked(QTableWidgetItem *item);
        
        void on_modif_clicked();
        
        void on_Delete_clicked();
        
        void on_agregar_clicked();
        

        private:
        Ui::Ciegas *ui;
        QSqlDatabase db_main;
        };

        #endif // CIEGAS_H

        ciegas.cpp
        #include "ciegas.h"
        #include "ui_ciegas.h"
        #include <QDebug>
        #include <QWidget>

        Ciegas::Ciegas(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Ciegas)
        {
        ui->setupUi(this);

        QStringList titulos;
        setWindowTitle("Blinds");
        
        QString nombre;
        nombre.append("db_ciega.sqlite");
        db_main = QSqlDatabase::addDatabase("QSQLITE");
        db_main.setDatabaseName(nombre);
        if(db_main.open()){
            qDebug()<<"Se ha conectado a la base de datos Ciegadb";
            //db_main.close();
        }else{
            qDebug()<<"ERROR! No se ha conectado a la base de datos Ciegadb";
        }
        
        CrearTablaCiegas1();
        MostrarCiegas();
        

        }

        Ciegas::~Ciegas()
        {
        delete ui;
        }

        void Ciegas::CrearTablaCiegas1()
        {
        db_main.open();
        QString consulta;
        consulta.append("CREATE TABLE IF NOT EXISTS Ciegas1("
        "Id INTEGER NOT NULL PRIMARY KEY,"
        "eid INTEGER,"
        "sblind INTEGER,"
        "bblind INTEGER,"
        "ante INTEGER,"
        "time INTEGER,"
        "break INTEGER"
        ")");
        QSqlQuery crear;
        crear.prepare(consulta);

        if(crear.exec()){
           qDebug()<<"La tabla CIEGAS1 existe o se ha creado correctamente";
        }else{
           qDebug()<<"La tabla CIEGAS1 NO existe o NO se ha creado correctamente";
           qDebug()<<"ERROR!"<<crear.lastError();
        }
        

        }

        void Ciegas::MostrarCiegas()
        {
        QString consulta;
        consulta.append("SELECT * FROM Ciegas1");
        QSqlQuery consultar;
        consultar.prepare(consulta);

            if(consultar.exec()){
               qDebug()<<"Se ha consultado correctamente";
            }else{
               qDebug()<<"NO se ha consultado correctamente";
               qDebug()<<"ERROR!"<<consultar.lastError();
            }
        
        
            int fila = 0;
        
            ui->Ciegas1->setRowCount(0);
        
            while(consultar.next()){
        
                ui->Ciegas1->insertRow(fila);
                ui->Ciegas1->setItem(fila,0,new QTableWidgetItem(consultar.value(1).toByteArray().constData()));
                ui->Ciegas1->item(fila,0)->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
                ui->Ciegas1->setItem(fila,1,new QTableWidgetItem(consultar.value(2).toByteArray().constData()));
                ui->Ciegas1->item(fila,1)->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
                ui->Ciegas1->setItem(fila,2,new QTableWidgetItem(consultar.value(3).toByteArray().constData()));
                ui->Ciegas1->item(fila,2)->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
                ui->Ciegas1->setItem(fila,3,new QTableWidgetItem(consultar.value(4).toByteArray().constData()));
                ui->Ciegas1->item(fila,3)->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
                ui->Ciegas1->setItem(fila,4,new QTableWidgetItem(consultar.value(5).toByteArray().constData()));
                ui->Ciegas1->item(fila,4)->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
                ui->Ciegas1->setItem(fila,5,new QTableWidgetItem(consultar.value(6).toByteArray().constData()));
                ui->Ciegas1->item(fila,5)->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
                fila++;
           }
        

        }

        void Ciegas::insertarCiegas()
        {
        QString consulta;
        consulta.append("INSERT INTO Ciegas1("
        "eid,"
        "sblind,"
        "bblind,"
        "ante,"
        "time,"
        "break)"
        "VALUES("
        ""+ui->eid1->text()+","
        ""+ui->sblind1->text()+","
        ""+ui->bblind1->text()+","
        ""+ui->ante1->text()+","
        ""+ui->time1->text()+","
        ""+ui->brea1->text()+""
        ")");
        QSqlQuery insertar;
        insertar.prepare(consulta);

            if(insertar.exec()){
               qDebug()<<"La CIEGA se ha insertado";
            }else{
               qDebug()<<"La CIEGA NO se ha insertado";
               qDebug()<<"ERROR!"<<insertar.lastError();
            }
        
            ui->eid1->setText("");
            ui->sblind1->setText("");
            ui->bblind1->setText("");
            ui->ante1->setText("");
            ui->time1->setText("");
            ui->brea1->setText("");
        

        }

        void Ciegas::on_Ciegas1_itemClicked(QTableWidgetItem *item)
        {
        file = item->row();
        QTableWidgetItem *Eid = ui->Ciegas1->item(file,0);
        QTableWidgetItem *Sblind = ui->Ciegas1->item(file,1);
        QTableWidgetItem *Bblind = ui->Ciegas1->item(file,2);
        QTableWidgetItem *Ante = ui->Ciegas1->item(file,3);
        QTableWidgetItem *Time = ui->Ciegas1->item(file,4);
        QTableWidgetItem *Break = ui->Ciegas1->item(file,5);

        ui->eid1->setText(Eid->text());
        ui->sblind1->setText(Sblind->text());
        ui->bblind1->setText(Bblind->text());
        ui->ante1->setText(Ante->text());
        ui->time1->setText(Time->text());
        ui->brea1->setText(Break->text());
        

        }

        void Ciegas::on_modif_clicked()
        {
        QString ei = ui->eid1->text();
        QString sb = ui->sblind1->text();
        QString bb = ui->bblind1->text();
        QString an = ui->ante1->text();
        QString ti = ui->time1->text();
        QString br = ui->brea1->text();

        QSqlQuery actualizar;
        
        actualizar.prepare("UPDATE Ciegas1 SET eid= '"+ei+"', sblind= '"+sb+"', bblind= '"+bb+"', ante= '"+an+"', time= '"+ti+"', break= '"+br+"' WHERE eid = '"+ei+"' " );
        actualizar.bindValue(":eid",ui->eid1->text());
        actualizar.bindValue(":sblind",ui->sblind1->text());
        actualizar.bindValue(":bblind",ui->bblind1->text());
        actualizar.bindValue(":ante",ui->ante1->text());
        actualizar.bindValue(":time",ui->time1->text());
        actualizar.bindValue(":break",ui->brea1->text());
        if(actualizar.exec()){
           qDebug()<<"El registro se ha modificado";
        }else{
           qDebug()<<"El registro NO se ha modificado";
           qDebug()<<"ERROR!"<<actualizar.lastError();
        }
        ui->eid1->setText("");
        ui->sblind1->setText("");
        ui->bblind1->setText("");
        ui->ante1->setText("");
        ui->time1->setText("");
        ui->brea1->setText("");
        
        MostrarCiegas();
        

        }

        void Ciegas::on_Delete_clicked()
        {
        QSqlQuery borrar;

        borrar.exec("DELETE FROM Ciegas1");
        if(borrar.exec()){
           qDebug()<<"Ciegas1 ha sido borrada";
        }else{
           qDebug()<<"Ciegas no ha podido ser borrada";
           qDebug()<<"ERROR!"<<borrar.lastError();
        }
        
        MostrarCiegas();
        

        }

        void Ciegas::on_agregar_clicked()
        {
        insertarCiegas();
        MostrarCiegas();
        }

        El tema es el siguiente, la base de datos se crea, el problema insertar, porque los mensajes de qDebug van dando todo bien hasta allí, cuando tiene que insertar no pasa nada y no hay mensaje de error, revisé si no tenía algún error en la escritura pero nada....

        juankiJ 1 Reply Last reply
        0
        • C Casino

          Acá lo mando:
          ciegas.h
          #ifndef CIEGAS_H
          #define CIEGAS_H

          #include <mainwindow.h>
          #include <QDialog>
          #include <QtSql/QSql>
          #include <QtSql/QSqlDatabase>
          #include <QtSql/QSqlQuery>
          #include <QtSql/QSqlError>
          #include <QTableWidgetItem>
          #include <QWidget>
          #include <QList>

          namespace Ui {
          class Ciegas;
          }

          class Ciegas : public QDialog
          {
          Q_OBJECT

          public:
          explicit Ciegas(QWidget *parent = nullptr);
          ~Ciegas();

          int file;
          
          
          
          void CrearTablaCiegas1();
          
          void MostrarCiegas();
          
          void insertarCiegas();
          
          void on_Ciegas1_itemClicked(QTableWidgetItem *item);
          
          void on_modif_clicked();
          
          void on_Delete_clicked();
          
          void on_agregar_clicked();
          

          private:
          Ui::Ciegas *ui;
          QSqlDatabase db_main;
          };

          #endif // CIEGAS_H

          ciegas.cpp
          #include "ciegas.h"
          #include "ui_ciegas.h"
          #include <QDebug>
          #include <QWidget>

          Ciegas::Ciegas(QWidget *parent) :
          QDialog(parent),
          ui(new Ui::Ciegas)
          {
          ui->setupUi(this);

          QStringList titulos;
          setWindowTitle("Blinds");
          
          QString nombre;
          nombre.append("db_ciega.sqlite");
          db_main = QSqlDatabase::addDatabase("QSQLITE");
          db_main.setDatabaseName(nombre);
          if(db_main.open()){
              qDebug()<<"Se ha conectado a la base de datos Ciegadb";
              //db_main.close();
          }else{
              qDebug()<<"ERROR! No se ha conectado a la base de datos Ciegadb";
          }
          
          CrearTablaCiegas1();
          MostrarCiegas();
          

          }

          Ciegas::~Ciegas()
          {
          delete ui;
          }

          void Ciegas::CrearTablaCiegas1()
          {
          db_main.open();
          QString consulta;
          consulta.append("CREATE TABLE IF NOT EXISTS Ciegas1("
          "Id INTEGER NOT NULL PRIMARY KEY,"
          "eid INTEGER,"
          "sblind INTEGER,"
          "bblind INTEGER,"
          "ante INTEGER,"
          "time INTEGER,"
          "break INTEGER"
          ")");
          QSqlQuery crear;
          crear.prepare(consulta);

          if(crear.exec()){
             qDebug()<<"La tabla CIEGAS1 existe o se ha creado correctamente";
          }else{
             qDebug()<<"La tabla CIEGAS1 NO existe o NO se ha creado correctamente";
             qDebug()<<"ERROR!"<<crear.lastError();
          }
          

          }

          void Ciegas::MostrarCiegas()
          {
          QString consulta;
          consulta.append("SELECT * FROM Ciegas1");
          QSqlQuery consultar;
          consultar.prepare(consulta);

              if(consultar.exec()){
                 qDebug()<<"Se ha consultado correctamente";
              }else{
                 qDebug()<<"NO se ha consultado correctamente";
                 qDebug()<<"ERROR!"<<consultar.lastError();
              }
          
          
              int fila = 0;
          
              ui->Ciegas1->setRowCount(0);
          
              while(consultar.next()){
          
                  ui->Ciegas1->insertRow(fila);
                  ui->Ciegas1->setItem(fila,0,new QTableWidgetItem(consultar.value(1).toByteArray().constData()));
                  ui->Ciegas1->item(fila,0)->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
                  ui->Ciegas1->setItem(fila,1,new QTableWidgetItem(consultar.value(2).toByteArray().constData()));
                  ui->Ciegas1->item(fila,1)->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
                  ui->Ciegas1->setItem(fila,2,new QTableWidgetItem(consultar.value(3).toByteArray().constData()));
                  ui->Ciegas1->item(fila,2)->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
                  ui->Ciegas1->setItem(fila,3,new QTableWidgetItem(consultar.value(4).toByteArray().constData()));
                  ui->Ciegas1->item(fila,3)->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
                  ui->Ciegas1->setItem(fila,4,new QTableWidgetItem(consultar.value(5).toByteArray().constData()));
                  ui->Ciegas1->item(fila,4)->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
                  ui->Ciegas1->setItem(fila,5,new QTableWidgetItem(consultar.value(6).toByteArray().constData()));
                  ui->Ciegas1->item(fila,5)->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
                  fila++;
             }
          

          }

          void Ciegas::insertarCiegas()
          {
          QString consulta;
          consulta.append("INSERT INTO Ciegas1("
          "eid,"
          "sblind,"
          "bblind,"
          "ante,"
          "time,"
          "break)"
          "VALUES("
          ""+ui->eid1->text()+","
          ""+ui->sblind1->text()+","
          ""+ui->bblind1->text()+","
          ""+ui->ante1->text()+","
          ""+ui->time1->text()+","
          ""+ui->brea1->text()+""
          ")");
          QSqlQuery insertar;
          insertar.prepare(consulta);

              if(insertar.exec()){
                 qDebug()<<"La CIEGA se ha insertado";
              }else{
                 qDebug()<<"La CIEGA NO se ha insertado";
                 qDebug()<<"ERROR!"<<insertar.lastError();
              }
          
              ui->eid1->setText("");
              ui->sblind1->setText("");
              ui->bblind1->setText("");
              ui->ante1->setText("");
              ui->time1->setText("");
              ui->brea1->setText("");
          

          }

          void Ciegas::on_Ciegas1_itemClicked(QTableWidgetItem *item)
          {
          file = item->row();
          QTableWidgetItem *Eid = ui->Ciegas1->item(file,0);
          QTableWidgetItem *Sblind = ui->Ciegas1->item(file,1);
          QTableWidgetItem *Bblind = ui->Ciegas1->item(file,2);
          QTableWidgetItem *Ante = ui->Ciegas1->item(file,3);
          QTableWidgetItem *Time = ui->Ciegas1->item(file,4);
          QTableWidgetItem *Break = ui->Ciegas1->item(file,5);

          ui->eid1->setText(Eid->text());
          ui->sblind1->setText(Sblind->text());
          ui->bblind1->setText(Bblind->text());
          ui->ante1->setText(Ante->text());
          ui->time1->setText(Time->text());
          ui->brea1->setText(Break->text());
          

          }

          void Ciegas::on_modif_clicked()
          {
          QString ei = ui->eid1->text();
          QString sb = ui->sblind1->text();
          QString bb = ui->bblind1->text();
          QString an = ui->ante1->text();
          QString ti = ui->time1->text();
          QString br = ui->brea1->text();

          QSqlQuery actualizar;
          
          actualizar.prepare("UPDATE Ciegas1 SET eid= '"+ei+"', sblind= '"+sb+"', bblind= '"+bb+"', ante= '"+an+"', time= '"+ti+"', break= '"+br+"' WHERE eid = '"+ei+"' " );
          actualizar.bindValue(":eid",ui->eid1->text());
          actualizar.bindValue(":sblind",ui->sblind1->text());
          actualizar.bindValue(":bblind",ui->bblind1->text());
          actualizar.bindValue(":ante",ui->ante1->text());
          actualizar.bindValue(":time",ui->time1->text());
          actualizar.bindValue(":break",ui->brea1->text());
          if(actualizar.exec()){
             qDebug()<<"El registro se ha modificado";
          }else{
             qDebug()<<"El registro NO se ha modificado";
             qDebug()<<"ERROR!"<<actualizar.lastError();
          }
          ui->eid1->setText("");
          ui->sblind1->setText("");
          ui->bblind1->setText("");
          ui->ante1->setText("");
          ui->time1->setText("");
          ui->brea1->setText("");
          
          MostrarCiegas();
          

          }

          void Ciegas::on_Delete_clicked()
          {
          QSqlQuery borrar;

          borrar.exec("DELETE FROM Ciegas1");
          if(borrar.exec()){
             qDebug()<<"Ciegas1 ha sido borrada";
          }else{
             qDebug()<<"Ciegas no ha podido ser borrada";
             qDebug()<<"ERROR!"<<borrar.lastError();
          }
          
          MostrarCiegas();
          

          }

          void Ciegas::on_agregar_clicked()
          {
          insertarCiegas();
          MostrarCiegas();
          }

          El tema es el siguiente, la base de datos se crea, el problema insertar, porque los mensajes de qDebug van dando todo bien hasta allí, cuando tiene que insertar no pasa nada y no hay mensaje de error, revisé si no tenía algún error en la escritura pero nada....

          juankiJ Offline
          juankiJ Offline
          juanki
          Moderators
          wrote on last edited by juanki
          #4

          Hola @Casino

          Voy a ver si te doy algunas recomendaciones según lo que yo hago y así vamos buscando el problema.

          Inicializar la base de datos yo lo hago en el main, antes de abir la ventana principal, así, si no se puede abrir, puedes mostrar un mensaje y salir del programa. Además, como lo tienes, cada vez que abres el diálogo Ciegas estás creando una conexión con la base de datos, haciéndolo en el main solo tendrás una conexión.

          Además, para abrir la conexión de doy un nombre a ésta, así es fácil usarla después:

          db_main = QSqlDatabase::addDatabase("QSQLITE", "nombre_de_la_conexion");
          

          Y las tablas tendrás que crearlas cuando abres la base de datos en main.

          Luego, para referirse a ella en el diálogo Ciegas, usas:

          db_main = QSqlDatabase::database("nombre_de_la_conexion");
          

          y luego, cuando uses una query pásale la conexión:

          QSqlQuery crear(db_main);
          

          A la hora de preparar las querys yo lo haría aprobechando las facilidades que te da Qt:

          QSqlQuery insertar(main_db);
          insertar.prepare("INSERT INTO Ciegas1(eid, sblind, bblind .....) VALUES (:eid, :sblind, :bblind .....)");
          insertar.bindValue(":eid", ui->eid1->text().toInt()); // tienes que pasarle enteros!!
          insertar.bindValue(":sblind", ui->sblind1->text().toInt());
          insertar.bindValue(":bblind", ui->bblind1->text().toInt());
          ......
          
          if(insertar.exec()){
               qDebug()<<"La CIEGA se ha insertado";
          }else{
                qDebug()<<"La CIEGA NO se ha insertado";
                qDebug()<<"ERROR!"<<insertar.lastError();
          }
          

          Normalmente si hay algún error suele mostrar un mensaje en la consola. Intenta aplicar algunos cambios a ver, luego intentaré darle un repaso mas a fondo a ver si encuentro algún problema.

          PD:
          Revisando la parte de actualizar me di cuenta de una cosa, los campos de la base de datos son de tipo INTEGER, así que cuando haces bindValue tienes que pasarle un entero, y le estás pasando un String (que es lo que devuelve text()))

          Esta consulta la tienes incorrecta, es decir, al crear la consulta ya le estás pasando el valor de cada campo, por lo que no tienes que llamar a bindValue después:

          actualizar.prepare("UPDATE Ciegas1 SET eid= '"+ei+"', sblind= '"+sb+"', bblind= '"+bb+"', ante= '"+an+"', time= '"+ti+"', break= '"+br+"' WHERE eid = '"+ei+"' " );
          actualizar.bindValue(":eid",ui->eid1->text());
          actualizar.bindValue(":sblind",ui->sblind1->text());
          

          modifícala como te puse arriba a ver si no te da error, y pásale un entero, no un String.

          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
          1

          • Login

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