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. QSql QSqlDatabasePrivate::removeDatabase: connection 'IDconnect' is still in use, all queries will cease to work.
Forum Updated to NodeBB v4.3 + New Features

QSql QSqlDatabasePrivate::removeDatabase: connection 'IDconnect' is still in use, all queries will cease to work.

Scheduled Pinned Locked Moved Unsolved General and Desktop
qsql
16 Posts 2 Posters 7.8k Views 2 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.
  • S SGaist
    19 Aug 2016, 21:48

    Hi,

    It's your db object that triggers that message.

    Take a look at the removeDatabase documentation to see how to handle your use case properly.

    G Offline
    G Offline
    gabor53
    wrote on 20 Aug 2016, 03:06 last edited by
    #3

    @SGaist
    Thank you. It worked.

    1 Reply Last reply
    0
    • S Offline
      S Offline
      SGaist
      Lifetime Qt Champion
      wrote on 20 Aug 2016, 21:46 last edited by
      #4

      Then please mark the thread as solved using the "Topic Tools" button so that other forum users may know a solution has been found :)

      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
      • G Offline
        G Offline
        gabor53
        wrote on 26 Aug 2016, 15:09 last edited by
        #5

        Thank you. It worked.

        1 Reply Last reply
        0
        • S SGaist
          19 Aug 2016, 21:48

          Hi,

          It's your db object that triggers that message.

          Take a look at the removeDatabase documentation to see how to handle your use case properly.

          G Offline
          G Offline
          gabor53
          wrote on 27 Aug 2016, 15:46 last edited by
          #6

          @SGaist
          Hi,
          I got back to the same problem.
          I realized that when Additem loads the first time everything works fine. I get the error message when Additem is reloaded from another class, Review. I assume, somehow the original Additem database connections are still active when I load the class the second time. How can I avoid recreating the connection each time I reload Additem?
          Thank you.

          1 Reply Last reply
          0
          • S Offline
            S Offline
            SGaist
            Lifetime Qt Champion
            wrote on 27 Aug 2016, 21:24 last edited by
            #7

            Do you have several connections to the database ?

            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
            0
            • G Offline
              G Offline
              gabor53
              wrote on 28 Aug 2016, 00:57 last edited by
              #8

              Yeswith different names.

              1 Reply Last reply
              0
              • G Offline
                G Offline
                gabor53
                wrote on 28 Aug 2016, 01:08 last edited by
                #9

                I ment connection names. Also when Additem is called several times I assume it attempts to reconnect to the db and kills the previous connection with the same name.

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on 28 Aug 2016, 06:34 last edited by
                  #10

                  You don't need to re-create the connection each time. You create it one time and then, depending on how your application works, you open and close it at will or open it once at the start of your application. When you want to use it, you can use the following construct:

                  void MyCoolClass::myCoolFunction()
                  {
                  QSqlDatabase db = QSqlDatabase::database("IDconnect");
                  // open if needed
                  QSqlQuery query(db);
                  // rest of your code
                  // close if needed
                  }
                  

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

                  G 1 Reply Last reply 28 Aug 2016, 14:28
                  0
                  • S SGaist
                    28 Aug 2016, 06:34

                    You don't need to re-create the connection each time. You create it one time and then, depending on how your application works, you open and close it at will or open it once at the start of your application. When you want to use it, you can use the following construct:

                    void MyCoolClass::myCoolFunction()
                    {
                    QSqlDatabase db = QSqlDatabase::database("IDconnect");
                    // open if needed
                    QSqlQuery query(db);
                    // rest of your code
                    // close if needed
                    }
                    
                    G Offline
                    G Offline
                    gabor53
                    wrote on 28 Aug 2016, 14:28 last edited by
                    #11

                    @SGaist
                    Thank you. Do I close it the right way using db.close() and removeDatabase?

                    1 Reply Last reply
                    0
                    • S Offline
                      S Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on 28 Aug 2016, 15:08 last edited by
                      #12

                      There's no need to call removeDatabase every time. QSqlDatabase can be seen as a sort of registry where you store all the connection data for the databases you are going to access. Unless you have good reasons to remove that particular connection, just set it up once and for the rest follow the myCoolFunction example.

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

                      G 1 Reply Last reply 31 Aug 2016, 03:54
                      0
                      • S SGaist
                        28 Aug 2016, 15:08

                        There's no need to call removeDatabase every time. QSqlDatabase can be seen as a sort of registry where you store all the connection data for the databases you are going to access. Unless you have good reasons to remove that particular connection, just set it up once and for the rest follow the myCoolFunction example.

                        G Offline
                        G Offline
                        gabor53
                        wrote on 31 Aug 2016, 03:54 last edited by
                        #13

                        @SGaist
                        I made some changes. The db connection is used in the Additem class so I created a connection function like this:

                        void Additem::connection()
                        {
                            if(!db.open ())
                                {
                                    db = QSqlDatabase::addDatabase ("QSQLITE","Friend");
                                    db.setDatabaseName (fileQstring );
                                }
                        }
                        

                        This became the only db opening statement. I call this function before function Addfriend as Addfriend is the function where the db connection is used. Whenever Additem is called, I get the usual error messages:
                        QSqlDatabasePrivate::removeDatabase: connection 'Friend' is still in use, all queries will cease to work.
                        QSqlDatabasePrivate::addDatabase: duplicate connection name 'Friend', old connection removed.

                        Closing Additem clearly doesn't removes the connection (based on the error messages) but if there is no connection why does the !db.open thinks the connection is still open and gives me a new message? Thank you.

                        1 Reply Last reply
                        0
                        • S Offline
                          S Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on 31 Aug 2016, 11:06 last edited by
                          #14

                          Again, you have a QSqlDatabase class member. Each time you create a Additem object you create a new invalid QSqlDatabase object that will be replaced in connection and depending on how Additem objects are managed, you'll have several of these connection re-created.

                          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
                          0
                          • G Offline
                            G Offline
                            gabor53
                            wrote on 31 Aug 2016, 12:57 last edited by
                            #15

                            Is this something I definitely have to fix or it's not a big deal?

                            1 Reply Last reply
                            0
                            • S Offline
                              S Offline
                              SGaist
                              Lifetime Qt Champion
                              wrote on 31 Aug 2016, 22:19 last edited by
                              #16

                              Duplicating connection name means that you will break at least one connection. I'd rather not overlook that.

                              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
                              0

                              12/16

                              28 Aug 2016, 15:08

                              • Login

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