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. [Solved] The "best" way to programmatically refresh a QSqlQueryModel when the content of the query changes
Forum Updated to NodeBB v4.3 + New Features

[Solved] The "best" way to programmatically refresh a QSqlQueryModel when the content of the query changes

Scheduled Pinned Locked Moved General and Desktop
14 Posts 9 Posters 22.8k 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.
  • D Offline
    D Offline
    d.oberkofler
    wrote on 18 Oct 2010, 16:40 last edited by
    #4

    I would also guess that the performance impact very much depends on how the Qt database driver is implemented and the internals of the database itself.
    I also agree that setQuery typically should not have a huge performance impact but why should this not be encapsulated in the Qt model itself. In my impression a simple public refresh method just seems to be missing.
    To give a an example I use the situation I came across when issuing this message.
    I use a rather complex SQL query to an Oracle Database to retrieve data that will be used in a graph.
    The graph will be updated every second using a timer with the latest data and update the graph.
    The columns and the query are constant and I would only like to "refresh" the data will the latest values.

    1 Reply Last reply
    0
    • Z Offline
      Z Offline
      ZapB
      wrote on 18 Oct 2010, 18:30 last edited by
      #5

      Another way is to prepare a database view of your complex query and then use a QSqlTableModel on the view. This class does expose an exec() method to re-run the query.

      Nokia Certified Qt Specialist
      Interested in hearing about Qt related work

      1 Reply Last reply
      0
      • Z Offline
        Z Offline
        ZapB
        wrote on 18 Oct 2010, 18:33 last edited by
        #6

        Oops sorry, the method is actually select() not exec(). /me should check the docs.

        Nokia Certified Qt Specialist
        Interested in hearing about Qt related work

        1 Reply Last reply
        0
        • X Offline
          X Offline
          xj.liu.yang
          wrote on 6 Nov 2010, 08:04 last edited by
          #7

          QSqlTableModel::select() use setQuery( QString, QSqlDatabase ) method refresh contents. I guess you could do it the same way.

          1 Reply Last reply
          0
          • G Offline
            G Offline
            Galbarad
            wrote on 19 Apr 2013, 12:14 last edited by
            #8

            Hi all
            I have similar question I am use QTableView + QSqlQuery when I set query at first time I allow fetch only first 10 rows from query, after that according user decides I can fetch next few rows, but my QTableView is not refreshed after fetch. I can't use setQuery because I do not what run sql yet one time to get result that I already have.
            I try to use something like this
            @emit dataChanged(createIndex(OldRowCnt, 1), createIndex(RowCount, HeaderCount));@
            but this has no result

            thank you for future help )

            1 Reply Last reply
            0
            • G Offline
              G Offline
              Galbarad
              wrote on 22 Apr 2013, 10:39 last edited by
              #9

              beginInsertRows solve my problem, I am call it after fetch

              @bool cOciQModel::fetch(int Cnt, bool SilentMode) {
              if (RowCount && !query->seek(RowCount - 1)) {
              LastError = QString("Can't goto [%1] position").arg(QString::number(RowCount - 1));
              return false;
              }
              int OldRowCnt = RowCount;
              int Count = Cnt + 1;
              while (--Count && !AllDataFetched) {
              AllDataFetched = !query->next();
              if (!AllDataFetched) {
              ++RowCount;
              }
              }

              if (!SilentMode) {
              beginInsertRows(QModelIndex(), OldRowCnt, RowCount);
              endInsertRows();
              }

              return true;
              

              }@

              1 Reply Last reply
              0
              • I Offline
                I Offline
                iamantony
                wrote on 24 Dec 2015, 13:11 last edited by
                #10

                How I update QSqlQueryModel:

                QString queryStr = model->query().executedQuery();
                model->clear();
                model->query().clear();
                model->setQuery(queryStr);
                
                ? 1 Reply Last reply 20 Jan 2017, 11:36
                0
                • I iamantony
                  24 Dec 2015, 13:11

                  How I update QSqlQueryModel:

                  QString queryStr = model->query().executedQuery();
                  model->clear();
                  model->query().clear();
                  model->setQuery(queryStr);
                  
                  ? Offline
                  ? Offline
                  A Former User
                  wrote on 20 Jan 2017, 11:36 last edited by
                  #11

                  @iamantony how to do it with Python?

                  J 1 Reply Last reply 20 Jan 2017, 12:18
                  0
                  • ? A Former User
                    20 Jan 2017, 11:36

                    @iamantony how to do it with Python?

                    J Offline
                    J Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on 20 Jan 2017, 12:18 last edited by
                    #12

                    @Gelo Replace -> with .

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

                    ? 1 Reply Last reply 20 Jan 2017, 14:51
                    0
                    • J jsulm
                      20 Jan 2017, 12:18

                      @Gelo Replace -> with .

                      ? Offline
                      ? Offline
                      A Former User
                      wrote on 20 Jan 2017, 14:51 last edited by
                      #13

                      @jsulm

                      QString queryStr = model->query().executedQuery();
                      model->clear();
                      model->query().clear();
                      model->setQuery(queryStr);

                      is that c++? for what is QString?

                      J 1 Reply Last reply 23 Jan 2017, 05:12
                      0
                      • ? A Former User
                        20 Jan 2017, 14:51

                        @jsulm

                        QString queryStr = model->query().executedQuery();
                        model->clear();
                        model->query().clear();
                        model->setQuery(queryStr);

                        is that c++? for what is QString?

                        J Offline
                        J Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on 23 Jan 2017, 05:12 last edited by
                        #14

                        @Gelo Yes, it is C++.
                        QString is a Qt data type for strings - no need to write it in Python.

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

                        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