Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt for Python
  4. Put data in TableView after SQl query
Forum Updated to NodeBB v4.3 + New Features

Put data in TableView after SQl query

Scheduled Pinned Locked Moved Qt for Python
29 Posts 4 Posters 3.2k Views
  • 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.
  • K Offline
    K Offline
    Karoluss96
    wrote on 8 Jul 2022, 06:38 last edited by Karoluss96 7 Aug 2022, 06:39
    #19

    I put the text of error in a previous post /\

    J 1 Reply Last reply 8 Jul 2022, 06:42
    0
    • K Karoluss96
      8 Jul 2022, 06:38

      I put the text of error in a previous post /\

      J Offline
      J Offline
      jsulm
      Lifetime Qt Champion
      wrote on 8 Jul 2022, 06:42 last edited by jsulm 7 Aug 2022, 06:44
      #20

      @Karoluss96 The error is quite clear: you can't set QTableView (which is a view) as model...
      What @JonB suggested is to use https://doc.qt.io/qt-6/qsqltablemodel.html or https://doc.qt.io/qt-6/qsqlquerymodel.html as model to get data from your SQL database and set that model in self.dlg.tableView_5

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

      1 Reply Last reply
      1
      • K Offline
        K Offline
        Karoluss96
        wrote on 8 Jul 2022, 06:53 last edited by
        #21

        OK, now I have at beginning:

        q= QSqlQueryModel()
          table = QSqlTableModel()
        
        J 1 Reply Last reply 8 Jul 2022, 07:22
        0
        • K Karoluss96
          8 Jul 2022, 06:53

          OK, now I have at beginning:

          q= QSqlQueryModel()
            table = QSqlTableModel()
          
          J Offline
          J Offline
          JonB
          wrote on 8 Jul 2022, 07:22 last edited by
          #22

          @Karoluss96
          Why do you have both a QSqlQueryModel and a QSqlTableModel? Why two models?

          And you are assigning each of these to a function-local variable now. You will not be able to access these outside of this function, and they may be destroyed when they go out of scope.

          1 Reply Last reply
          0
          • K Offline
            K Offline
            Karoluss96
            wrote on 8 Jul 2022, 07:54 last edited by
            #23

            Both I catch in one funtion, so I needn't put them global.
            Now I have that:

             q= QSqlQueryModel()
                    table = QSqlTableModel()
                    self.dlg.tableView_3.show()
                    if con == Zest[0]:
                       sql2 = "SELECT * FROM ZARZADZANIE.ZAMOWIENIA_WG_STATUS_V"
                       q=query.exec_(sql2)
                       a=table.setQuery(q)
                       self.dlg.tableView_5.setModel(a)  
                       print (a)
            

            with an error: TypeError: setQuery(self, QSqlQuery): argument 1 has unexpected type 'bool'

            J 1 Reply Last reply 8 Jul 2022, 08:13
            0
            • K Karoluss96
              8 Jul 2022, 07:54

              Both I catch in one funtion, so I needn't put them global.
              Now I have that:

               q= QSqlQueryModel()
                      table = QSqlTableModel()
                      self.dlg.tableView_3.show()
                      if con == Zest[0]:
                         sql2 = "SELECT * FROM ZARZADZANIE.ZAMOWIENIA_WG_STATUS_V"
                         q=query.exec_(sql2)
                         a=table.setQuery(q)
                         self.dlg.tableView_5.setModel(a)  
                         print (a)
              

              with an error: TypeError: setQuery(self, QSqlQuery): argument 1 has unexpected type 'bool'

              J Offline
              J Offline
              jsulm
              Lifetime Qt Champion
              wrote on 8 Jul 2022, 08:13 last edited by
              #24

              @Karoluss96 said in Put data in TableView after SQl query:

              q= QSqlQueryModel()
              table = QSqlTableModel()

              I'm wondering how often we need to write that you are creating local variables which are destroyed as soon as the method finishes?

              And did you actually read what @JonB wrote? Again: why do you have QSqlQueryModel AND QSqlTableModel?

              Why are you overwriting q here:

              q=query.exec_(sql2)
              

              ?
              You should really think more about what you are doing...

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

              1 Reply Last reply
              0
              • K Offline
                K Offline
                Karoluss96
                wrote on 8 Jul 2022, 08:20 last edited by Karoluss96 7 Aug 2022, 08:22
                #25

                OK, I read his suggestion, but still don't what is a problem in 'creating local variables which are destroyed as soon as the method finishes' - this variables exist only in this function

                q=query.exec_(sql2) come from different function in my app, which execute query in assigned variable, that have the SQL command as a string.

                Now the error is little different: TypeError: setQuery(self, QSqlQuery): argument 1 has unexpected type 'str'

                J 1 Reply Last reply 8 Jul 2022, 08:25
                0
                • K Karoluss96
                  8 Jul 2022, 08:20

                  OK, I read his suggestion, but still don't what is a problem in 'creating local variables which are destroyed as soon as the method finishes' - this variables exist only in this function

                  q=query.exec_(sql2) come from different function in my app, which execute query in assigned variable, that have the SQL command as a string.

                  Now the error is little different: TypeError: setQuery(self, QSqlQuery): argument 1 has unexpected type 'str'

                  J Offline
                  J Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on 8 Jul 2022, 08:25 last edited by
                  #26

                  @Karoluss96 said in Put data in TableView after SQl query:

                  but still don't what is a problem in 'creating local variables which are destroyed as soon as the method finishes'

                  Simple: your models (q and table) will be destroyed as soon as the method finishes, so your tableView_5 will not show anything.

                  "q=query.exec_(sql2) come from different function in my app" - don't just copy/paste something without thinking about what you are doing.

                  "Now the error is little different" - please, if you get an error show also the code causing this error!

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

                  1 Reply Last reply
                  0
                  • K Offline
                    K Offline
                    Karoluss96
                    wrote on 8 Jul 2022, 08:33 last edited by
                    #27

                    Problem is in last line of this code:

                    sql2 = "SELECT * FROM ZARZADZANIE.ZAMOWIENIA_WG_STATUS_V"
                               q=query.exec_(sql2)
                               print (q)
                               c=self.dlg.tableView_5.setModel(q)  
                    

                    I don't know why q is converted from string to bool.
                    If I put in setModel sql2 instead of q it shout that here can be the string

                    about sentance: " models (q and table) will be destroyed as soon as the method finishes, so your tableView_5 will not show anything." what do you propose?

                    J 1 Reply Last reply 8 Jul 2022, 08:34
                    0
                    • K Karoluss96
                      8 Jul 2022, 08:33

                      Problem is in last line of this code:

                      sql2 = "SELECT * FROM ZARZADZANIE.ZAMOWIENIA_WG_STATUS_V"
                                 q=query.exec_(sql2)
                                 print (q)
                                 c=self.dlg.tableView_5.setModel(q)  
                      

                      I don't know why q is converted from string to bool.
                      If I put in setModel sql2 instead of q it shout that here can be the string

                      about sentance: " models (q and table) will be destroyed as soon as the method finishes, so your tableView_5 will not show anything." what do you propose?

                      J Offline
                      J Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on 8 Jul 2022, 08:34 last edited by
                      #28

                      @Karoluss96 said in Put data in TableView after SQl query:

                      I don't know why q is converted from string to bool.

                      Because you copy pasted code without thinking.
                      What do you think this line of code is doing?

                      q=query.exec_(sql2)
                      

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

                      1 Reply Last reply
                      0
                      • K Offline
                        K Offline
                        Karoluss96
                        wrote on 8 Jul 2022, 08:44 last edited by Karoluss96 7 Aug 2022, 08:51
                        #29

                        It should execute the sql in a different functions eg.

                              sql9 = 'SELECT * FROM ZARZADZANIE.STATUS_PRZEK_SLO'
                                query.exec_(sql9)
                        

                        It works, but here the result of query (by while query.next():)
                        goes to ComboBox not TableView

                        and earlier query is declared global as:

                        global query
                        query = QSqlQuery(db)
                        
                        1 Reply Last reply
                        0

                        28/29

                        8 Jul 2022, 08:34

                        • Login

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