Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. using model to fill tableView with QMYSQL
Forum Updated to NodeBB v4.3 + New Features

using model to fill tableView with QMYSQL

Scheduled Pinned Locked Moved Unsolved General and Desktop
31 Posts 6 Posters 4.4k 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.
  • Thank YouT Thank You

    Don't remove the database while you have a view/model using it

    How can I know that it is using the database or not??

    I just tried inserting QMessageBox when

    if(query->exec()){
    // same as the upper code here 
    QMessageBox::information(this,"NOw the database is shown", " This is also shown");
    }
    

    bed72770-61b8-47f8-b13a-4e0a7dd44ca2-image.png

    After clicking OK,
    1898caf6-1200-40ad-948d-07096e55b0fe-image.png
    The data vanishes again
    @jsulm @JonB can you see this?

    JonBJ Offline
    JonBJ Offline
    JonB
    wrote on last edited by
    #22

    @Thank-You
    After showing the message box, does your code execute QSqlDatabase::removeDatabase()? Just a "yes" or "no" answer.

    Thank YouT 1 Reply Last reply
    0
    • JonBJ JonB

      @Thank-You
      After showing the message box, does your code execute QSqlDatabase::removeDatabase()? Just a "yes" or "no" answer.

      Thank YouT Offline
      Thank YouT Offline
      Thank You
      wrote on last edited by Thank You
      #23

      @JonB
      No it doesn't
      It executes
      removeDatabase
      at the very end of the program
      like

      {
      db initialize
      execute query and set model
      show the message box
      }
      remove the database

      or you can see the code same but there is
      messagebox inside if(query->exec){
      // all execution like model etc
      messagebox
      }

      Let's make QT free or It will go forever

      TRUE AND FALSE <3

      JonBJ 1 Reply Last reply
      0
      • Thank YouT Thank You

        @JonB
        No it doesn't
        It executes
        removeDatabase
        at the very end of the program
        like

        {
        db initialize
        execute query and set model
        show the message box
        }
        remove the database

        or you can see the code same but there is
        messagebox inside if(query->exec){
        // all execution like model etc
        messagebox
        }

        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by JonB
        #24

        @Thank-You
        If you really want anyone to look at this, show your actual relevant, minimal code which reproduces the issue, not a description of it.

        Thank YouT 1 Reply Last reply
        0
        • JonBJ JonB

          @Thank-You
          If you really want anyone to look at this, show your actual relevant, minimal code which reproduces the issue, not a description of it.

          Thank YouT Offline
          Thank YouT Offline
          Thank You
          wrote on last edited by Thank You
          #25

          @JonB I have posted the code right at the top
          Exactly that code brings this error

          void tableFill::fill_table(){
          QString command = "select * from countryDetails;";
             {
          QString databaseName = "root";
          QString databasePassword= "";
          QString databaseUsername= "root";
          QString databaseHost = "localhost";
          int databaseName = 3306;
          
          
                 QSqlDatabase db =  QSqlDatabase::addDatabase("QMYSQL");
                 db.setDatabaseName(databaseName);
          db.setPort(databasePort);
          db.setHostName(databaseHostname);
          db.setUserName(databaseUsername);
          db.setPassword(databasePassword);
              
                 if(db.open()){
                     QSqlQueryModel *model = new QSqlQueryModel();
                     QSqlQuery *query = new QSqlQuery(db);
                     query->prepare(command);
                     if(query->exec()){
                         model->setQuery(*query);
                         ui->information->setModel(model);
          //setting the model 
                     }else{
                         QMessageBox::warning(this,"ERrors in query exec" ,"Error while using query execution"+query->lastError().text());
                     }
          
                 }else{
                     QMessageBox::warning(this,"Error in database ", "Database is not connected "+db.lastError().text());
                 }
          
             }
             QSqlDatabase::removeDatabase("qt_sql_default_connection"); 
          }
          

          Let's make QT free or It will go forever

          TRUE AND FALSE <3

          Christian EhrlicherC JonBJ 2 Replies Last reply
          0
          • Thank YouT Thank You

            @JonB I have posted the code right at the top
            Exactly that code brings this error

            void tableFill::fill_table(){
            QString command = "select * from countryDetails;";
               {
            QString databaseName = "root";
            QString databasePassword= "";
            QString databaseUsername= "root";
            QString databaseHost = "localhost";
            int databaseName = 3306;
            
            
                   QSqlDatabase db =  QSqlDatabase::addDatabase("QMYSQL");
                   db.setDatabaseName(databaseName);
            db.setPort(databasePort);
            db.setHostName(databaseHostname);
            db.setUserName(databaseUsername);
            db.setPassword(databasePassword);
                
                   if(db.open()){
                       QSqlQueryModel *model = new QSqlQueryModel();
                       QSqlQuery *query = new QSqlQuery(db);
                       query->prepare(command);
                       if(query->exec()){
                           model->setQuery(*query);
                           ui->information->setModel(model);
            //setting the model 
                       }else{
                           QMessageBox::warning(this,"ERrors in query exec" ,"Error while using query execution"+query->lastError().text());
                       }
            
                   }else{
                       QMessageBox::warning(this,"Error in database ", "Database is not connected "+db.lastError().text());
                   }
            
               }
               QSqlDatabase::removeDatabase("qt_sql_default_connection"); 
            }
            
            Christian EhrlicherC Offline
            Christian EhrlicherC Offline
            Christian Ehrlicher
            Lifetime Qt Champion
            wrote on last edited by Christian Ehrlicher
            #26

            @Thank-You And we told you at least two times that you must not remove the database connection while there is an open query for your QSqlTableModel!

            Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
            Visit the Qt Academy at https://academy.qt.io/catalog

            Thank YouT 1 Reply Last reply
            0
            • Thank YouT Thank You

              @JonB I have posted the code right at the top
              Exactly that code brings this error

              void tableFill::fill_table(){
              QString command = "select * from countryDetails;";
                 {
              QString databaseName = "root";
              QString databasePassword= "";
              QString databaseUsername= "root";
              QString databaseHost = "localhost";
              int databaseName = 3306;
              
              
                     QSqlDatabase db =  QSqlDatabase::addDatabase("QMYSQL");
                     db.setDatabaseName(databaseName);
              db.setPort(databasePort);
              db.setHostName(databaseHostname);
              db.setUserName(databaseUsername);
              db.setPassword(databasePassword);
                  
                     if(db.open()){
                         QSqlQueryModel *model = new QSqlQueryModel();
                         QSqlQuery *query = new QSqlQuery(db);
                         query->prepare(command);
                         if(query->exec()){
                             model->setQuery(*query);
                             ui->information->setModel(model);
              //setting the model 
                         }else{
                             QMessageBox::warning(this,"ERrors in query exec" ,"Error while using query execution"+query->lastError().text());
                         }
              
                     }else{
                         QMessageBox::warning(this,"Error in database ", "Database is not connected "+db.lastError().text());
                     }
              
                 }
                 QSqlDatabase::removeDatabase("qt_sql_default_connection"); 
              }
              
              JonBJ Offline
              JonBJ Offline
              JonB
              wrote on last edited by JonB
              #27

              @Thank-You
              This is exactly the code as it was. It has removeDatabase() immediately after the message box show. Which we have told you multiple times is wrong. It does not have the

              QMessageBox::information(this,"NOw the database is shown", " This is also shown");
              

              you later claimed to have put in, nor the output you showed in your last screenshot. Which doesn't correspond to that either.

              What else is there to say? You don't listen, you don't adjust your code, you show screenshots which don't pertain to the code.

              I think we are all done. We don't know what answer you are prepared to accept. I suggest you keep your code exactly as you have it, since that is the only thing you are prepared to accept. Bye.

              1 Reply Last reply
              0
              • Christian EhrlicherC Christian Ehrlicher

                @Thank-You And we told you at least two times that you must not remove the database connection while there is an open query for your QSqlTableModel!

                Thank YouT Offline
                Thank YouT Offline
                Thank You
                wrote on last edited by
                #28

                @Christian-Ehrlicher And when to remove it
                Or leave it without removing ?
                I said that it will give me errors,
                QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
                I don't want this application to have this error?

                OR
                How can I get the signal when query does not require the database.

                @JonB Please refer to my last code. It is exactly the same, Nothing different. May be I gave you the example of another table fill.
                Just see the last one and say exactly what is the problem just for the last time.

                Let's make QT free or It will go forever

                TRUE AND FALSE <3

                jsulmJ 1 Reply Last reply
                0
                • Thank YouT Thank You

                  @Christian-Ehrlicher And when to remove it
                  Or leave it without removing ?
                  I said that it will give me errors,
                  QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
                  I don't want this application to have this error?

                  OR
                  How can I get the signal when query does not require the database.

                  @JonB Please refer to my last code. It is exactly the same, Nothing different. May be I gave you the example of another table fill.
                  Just see the last one and say exactly what is the problem just for the last time.

                  jsulmJ Offline
                  jsulmJ Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on last edited by
                  #29

                  @Thank-You said in using model to fill tableView with QMYSQL:

                  I said that it will give me errors,

                  And I said you to not to add the database again and again, do it just once. I really don't know why it is necessary to repeat same things again and again...
                  Remove the database when it is not needed anymore (for example in the destructor of your class).

                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                  Thank YouT 1 Reply Last reply
                  0
                  • jsulmJ jsulm

                    @Thank-You said in using model to fill tableView with QMYSQL:

                    I said that it will give me errors,

                    And I said you to not to add the database again and again, do it just once. I really don't know why it is necessary to repeat same things again and again...
                    Remove the database when it is not needed anymore (for example in the destructor of your class).

                    Thank YouT Offline
                    Thank YouT Offline
                    Thank You
                    wrote on last edited by
                    #30

                    @jsulm OOOOw
                    Maybe it can help ,
                    I will try and say the result.

                    Let's make QT free or It will go forever

                    TRUE AND FALSE <3

                    1 Reply Last reply
                    0
                    • N Offline
                      N Offline
                      Nekreg45
                      wrote on last edited by
                      #31

                      Maybe an analogy would help with the advice that everybody has given. Pretend like running a query on a database is like teaching a dog a new trick. You want the dog to be alive when you teach the trick and still be alive to enjoy watching the trick.

                      What people are saying is that in your fill table function, you are creating a dog, teaching a trick, killing the dog, and wondering how come it doesn't perform the trick.

                      In conclusion, you need your dog to live as long as the lifetime that you want the user to see your table. Did this help?

                      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