Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. French
  4. Mettre à jour un ComboBox lors d'une modif en base de données
Forum Updated to NodeBB v4.3 + New Features

Mettre à jour un ComboBox lors d'une modif en base de données

Scheduled Pinned Locked Moved Unsolved French
4 Posts 3 Posters 1.5k Views 1 Watching
  • 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.
  • yoyoY Offline
    yoyoY Offline
    yoyo
    wrote on last edited by
    #1

    Bonjour,
    Je charge actuellement un ComboBox avec une base de données que je peux mettre à jour depuis mon programme.
    Problème lorsque je modifie la base, je suis obligé de redémarrer mon programme pour que les nouvelles valeurs apparaissent dans mon comboBox.
    Question : Quelqu'un connait-il la méthode à utiliser pour faire une mise à jour en temps réel ?
    D'avance merci !

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Bonjour,

      Comment est-ce que la combox est chargée ?
      Comment est-ce que la base de données est changée ?

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      1
      • yoyoY Offline
        yoyoY Offline
        yoyo
        wrote on last edited by
        #3

        En fait, je charge ma ComboBox dans ma mainWindows après avoir ouvert ma base de données :
        Code ci dessous

        /********************************************************
        Ouverture de la Base de données dans la MainWindows*
        ********************************************************/

            if (!connOpen())
            {
               ui->label_Status->setText("Failed to open the DataBase");
        
            }
            else {
               ui->label_Status->setText(("Connected to DataBase....."));
            }
        
            /********************************************************
             * requête pour remplir la Combo Box avec la colonne valeur de la Base de données*
             ********************************************************/
            QSqlQuery query;
            query.prepare("SELECT Valeur FROM Bourse_TTF"); //remplir le combo Box
            QSqlQueryModel *modal=new QSqlQueryModel();
            query.exec();
            modal->setQuery(query);
            ui->comboBox->setModel(modal); //chargement ComBo
        

        Puis dans une Qdialog, je peux ajouter ou modifier des valeurs à ma base données avec le code suivant :
        /********************************************************
        * Qdialog modif base de donnees *
        ********************************************************/

        void DataBase_Dialog::on_Valid_Data_pushButton_2_clicked()
        {

        NewValeur=ui->NewValeur_lineEdit->text();
        NewTTF=ui->NewTTF_lineEdit_3->text();
        New_Symbole=ui->NewSymbole_lineEdit_2->text();
        id=ui->id_lineEdit->text();
        QSqlQuery query;
        query.prepare("INSERT INTO Bourse_TTF (eid,Valeur,Symbole,TTF) VALUES ('"+id+"','"+NewValeur+"','"+New_Symbole+"','"+NewTTF+"')");
        //query.prepare("INSERT INTO Bourse_TTF (Valeur,Symbole,TTF) VALUES ('"+id+"','"+NewValeur+"','"+New_Symbole+"','"+NewTTF+"')");
        
        if (query.exec())
        {
            QSqlQuery query;
            query.prepare("SELECT * FROM Bourse_TTF");
            QSqlQueryModel *modal=new QSqlQueryModel();
            query.exec();
            modal->setQuery(query);
            ui->tableView->setModel(modal);
            QMessageBox::information(this, "DataBase", "inser data OK !");
        
        
        
        }
        else
            {QMessageBox::critical(this,tr("error::"),query.lastError().text());}
        

        }

        Quand je lance le programme, ça fonctionne !
        Lorsque j'ajoute une valeur dans ma base de données, celle ci est bien prise en compte. Le seul hic ! c'est qu'elle n'est pas rafraichie dans le comboBox qui est situé dans la mainWindows.
        Je suis obligé de fermer et relancer le programme pour retrouvé la nouvelle valeur dans le comboBox.
        Je pense qu'il faut envoyer un signal ou quelque chose comme ça pour dire au comboBox de mettre à jour ses valeurs lorsque la base de données est modifié mais j'vois pas comment faire.
        Je vois pas bien comment interagir entre une MainWindows et une Qdialog ???

        KroMignonK 1 Reply Last reply
        0
        • yoyoY yoyo

          En fait, je charge ma ComboBox dans ma mainWindows après avoir ouvert ma base de données :
          Code ci dessous

          /********************************************************
          Ouverture de la Base de données dans la MainWindows*
          ********************************************************/

              if (!connOpen())
              {
                 ui->label_Status->setText("Failed to open the DataBase");
          
              }
              else {
                 ui->label_Status->setText(("Connected to DataBase....."));
              }
          
              /********************************************************
               * requête pour remplir la Combo Box avec la colonne valeur de la Base de données*
               ********************************************************/
              QSqlQuery query;
              query.prepare("SELECT Valeur FROM Bourse_TTF"); //remplir le combo Box
              QSqlQueryModel *modal=new QSqlQueryModel();
              query.exec();
              modal->setQuery(query);
              ui->comboBox->setModel(modal); //chargement ComBo
          

          Puis dans une Qdialog, je peux ajouter ou modifier des valeurs à ma base données avec le code suivant :
          /********************************************************
          * Qdialog modif base de donnees *
          ********************************************************/

          void DataBase_Dialog::on_Valid_Data_pushButton_2_clicked()
          {

          NewValeur=ui->NewValeur_lineEdit->text();
          NewTTF=ui->NewTTF_lineEdit_3->text();
          New_Symbole=ui->NewSymbole_lineEdit_2->text();
          id=ui->id_lineEdit->text();
          QSqlQuery query;
          query.prepare("INSERT INTO Bourse_TTF (eid,Valeur,Symbole,TTF) VALUES ('"+id+"','"+NewValeur+"','"+New_Symbole+"','"+NewTTF+"')");
          //query.prepare("INSERT INTO Bourse_TTF (Valeur,Symbole,TTF) VALUES ('"+id+"','"+NewValeur+"','"+New_Symbole+"','"+NewTTF+"')");
          
          if (query.exec())
          {
              QSqlQuery query;
              query.prepare("SELECT * FROM Bourse_TTF");
              QSqlQueryModel *modal=new QSqlQueryModel();
              query.exec();
              modal->setQuery(query);
              ui->tableView->setModel(modal);
              QMessageBox::information(this, "DataBase", "inser data OK !");
          
          
          
          }
          else
              {QMessageBox::critical(this,tr("error::"),query.lastError().text());}
          

          }

          Quand je lance le programme, ça fonctionne !
          Lorsque j'ajoute une valeur dans ma base de données, celle ci est bien prise en compte. Le seul hic ! c'est qu'elle n'est pas rafraichie dans le comboBox qui est situé dans la mainWindows.
          Je suis obligé de fermer et relancer le programme pour retrouvé la nouvelle valeur dans le comboBox.
          Je pense qu'il faut envoyer un signal ou quelque chose comme ça pour dire au comboBox de mettre à jour ses valeurs lorsque la base de données est modifié mais j'vois pas comment faire.
          Je vois pas bien comment interagir entre une MainWindows et une Qdialog ???

          KroMignonK Offline
          KroMignonK Offline
          KroMignon
          wrote on last edited by KroMignon
          #4

          @yoyo Bonjour, à la lecture du code, je vois dans l'initialisation:

          ui->comboBox->setModel(modal); //chargement ComBo
          

          Et dans la partie actualisation:

          ui->tableView->setModel(modal); // devrais être, à mon avis ui->comboBox->setModel(modal)
          

          Et personnellement, je changerais cela en:

          if (query.exec())
          {
              ui->comboBox->clear();
              static_cast<QSqlQueryModel *>(ui->comboBox->model())->exec();
              QMessageBox::information(this, "DataBase", "inser data OK !");
          }
          

          It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

          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