Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
qtws26_logo

The Qt Event of the Year: Qt World Summit 2026

Save Your Spot >
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. update qsqlite and qtableview
Qt 6.12 LTS is out! See what's new in the release blog

update qsqlite and qtableview

Scheduled Pinned Locked Moved Solved General and Desktop
17 Posts 4 Posters 3.4k 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.
  • jsulmJ jsulm

    @Mogli123 There is no WHERE in your query, so you're updating everything. If you, for example, want to update a data record with a specific ID you can do it like this:

    UPDATE ToolChangeWarnings (COLOR, TOOLNR, TIME, POCKETSTATUS) "
                                            "VALUES (:COLOR, :TOOLNR, :TIME, :POCKETSTATUS)"
                                            "WHERE ID = :ID"
    
    M Offline
    M Offline
    Mogli123
    wrote on last edited by
    #7

    @jsulm
    to updating everything it's ok, because the old data are not necessary after updating

    jsulmJ 1 Reply Last reply
    0
    • M Mogli123

      @jsulm
      to updating everything it's ok, because the old data are not necessary after updating

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

      @Mogli123 But then I don't understand what the problem is.
      Or maybe you misunderstood what I wrote? Without WHERE you're updating all data records in the table. So, if you have 10 records in that table all 10 will be updated.

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

      M 1 Reply Last reply
      0
      • jsulmJ jsulm

        @Mogli123 But then I don't understand what the problem is.
        Or maybe you misunderstood what I wrote? Without WHERE you're updating all data records in the table. So, if you have 10 records in that table all 10 will be updated.

        M Offline
        M Offline
        Mogli123
        wrote on last edited by Mogli123
        #9

        @jsulm
        Yes that is that wat I want because I don't know which data had changed therefore I want to override all data.
        Or is this a bad solution?
        My problem is that it does not work and I don't know why.
        after writing the data at first time it works fine and the qtableview is displaying them.
        If I try to update them the qtableview does nothing
        Furthermore I don't know if updating the database works because the qtableview shows no new data

        M 1 Reply Last reply
        0
        • M Mogli123

          @jsulm
          Yes that is that wat I want because I don't know which data had changed therefore I want to override all data.
          Or is this a bad solution?
          My problem is that it does not work and I don't know why.
          after writing the data at first time it works fine and the qtableview is displaying them.
          If I try to update them the qtableview does nothing
          Furthermore I don't know if updating the database works because the qtableview shows no new data

          M Offline
          M Offline
          Mogli123
          wrote on last edited by
          #10
          This post is deleted!
          1 Reply Last reply
          0
          • M Offline
            M Offline
            Mogli123
            wrote on last edited by
            #11

            if I try something like this

                    queryToolChangeWarnings->prepare("UPDATE ToolChangeWarnings SET TOOLNR = :TOOLNR");
                    queryToolChangeWarnings->bindValue(":TOOLNR", arrayToolChangeWarnings[0]);
            

            The updating is working but complete column TOOLNR geht the int value from the arrayToolChangeWarnings[0]

            How can I only update for example the first value from the column not the complete column
            and so on

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

              Because your query asks exactly for that. Use the WHERE keyword and state precisely where you want the update to happen.

              See the documentation which also contain a big warning about missing the WHERE part.

              [edit: added link to documentation SGaist]

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

              M 1 Reply Last reply
              2
              • SGaistS SGaist

                Because your query asks exactly for that. Use the WHERE keyword and state precisely where you want the update to happen.

                See the documentation which also contain a big warning about missing the WHERE part.

                [edit: added link to documentation SGaist]

                M Offline
                M Offline
                Mogli123
                wrote on last edited by Mogli123
                #13

                @SGaist
                Sorry your right
                If I try it lik this it works

                 queryToolChangeWarnings->prepare("UPDATE ToolChangeWarnings SET TOOLNR = :TOOLNR WHERE ID = 0");
                 queryToolChangeWarnings->bindValue(":TOOLNR", arrayToolChangeWarnings[0]);
                 queryToolChangeWarnings->exec();
                

                It looks like that it is very impractical to do this for all cells
                Do you know a solution to do this in a more efficient way

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

                  Then use another bind value for ID and pass it also to your query. You can do that in a loop.

                  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
                  2
                  • M Mogli123

                    @SGaist
                    Sorry your right
                    If I try it lik this it works

                     queryToolChangeWarnings->prepare("UPDATE ToolChangeWarnings SET TOOLNR = :TOOLNR WHERE ID = 0");
                     queryToolChangeWarnings->bindValue(":TOOLNR", arrayToolChangeWarnings[0]);
                     queryToolChangeWarnings->exec();
                    

                    It looks like that it is very impractical to do this for all cells
                    Do you know a solution to do this in a more efficient way

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

                    @Mogli123
                    Provided I understand you right:

                    It looks like that it is very impractical to do this for all cells

                    I believe you're saying you have some array of data (from a TCP socket). You want to update the database to change the TOOLNR value of a bunch of rows to a variety of values in your input data,

                    It cannot be helped that this requires a distinct SQL statement to be sent to the database for each input value (array element). If you have a 100 rows of data you will be executing 100 SQL statements. That's how it is.

                    At the code side, as @SGaist says you do not have to write 100 lines of code, one for each row. You use a loop to produce the statements, like:

                    for (int i = 0; i < arrayToolChangeWarnings.size(); i++
                    {
                        queryToolChangeWarnings->prepare("UPDATE ToolChangeWarnings SET TOOLNR = :TOOLNR WHERE ID = " + QString::number(i));
                        queryToolChangeWarnings->bindValue(":TOOLNR", arrayToolChangeWarnings[i]);
                        queryToolChangeWarnings->exec();
                    }
                    

                    There may be a way of sending the multiple statements as a single batch efficiently, I don't know (but then you'd have to deal with the bindings somehow).

                    M 1 Reply Last reply
                    1
                    • JonBJ JonB

                      @Mogli123
                      Provided I understand you right:

                      It looks like that it is very impractical to do this for all cells

                      I believe you're saying you have some array of data (from a TCP socket). You want to update the database to change the TOOLNR value of a bunch of rows to a variety of values in your input data,

                      It cannot be helped that this requires a distinct SQL statement to be sent to the database for each input value (array element). If you have a 100 rows of data you will be executing 100 SQL statements. That's how it is.

                      At the code side, as @SGaist says you do not have to write 100 lines of code, one for each row. You use a loop to produce the statements, like:

                      for (int i = 0; i < arrayToolChangeWarnings.size(); i++
                      {
                          queryToolChangeWarnings->prepare("UPDATE ToolChangeWarnings SET TOOLNR = :TOOLNR WHERE ID = " + QString::number(i));
                          queryToolChangeWarnings->bindValue(":TOOLNR", arrayToolChangeWarnings[i]);
                          queryToolChangeWarnings->exec();
                      }
                      

                      There may be a way of sending the multiple statements as a single batch efficiently, I don't know (but then you'd have to deal with the bindings somehow).

                      M Offline
                      M Offline
                      Mogli123
                      wrote on last edited by
                      #16

                      @JonB
                      @SGaist
                      @jsulm

                      Thank you very much that's exactly what I want

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

                        Great !

                        Then please mark the thread as solved using the "Topic Tools" button so that other forum uses 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
                        0

                        • Login

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