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.7k 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.
  • Karoluss96K Karoluss96

    I changed assigning QTableView from model to table.
    Then I put it into

    self.dlg.tableView_5.setModel(table)
    

    but it makes an error

    TypeError: setModel(self, QAbstractItemModel): argument 1 has unexpected type 'QTableView'

    jsulmJ Online
    jsulmJ Online
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #18

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

    but it makes an error

    Would be nice if you would tell us what error it is...

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

    1 Reply Last reply
    0
    • Karoluss96K Offline
      Karoluss96K Offline
      Karoluss96
      wrote on last edited by Karoluss96
      #19

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

      jsulmJ 1 Reply Last reply
      0
      • Karoluss96K Karoluss96

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

        jsulmJ Online
        jsulmJ Online
        jsulm
        Lifetime Qt Champion
        wrote on last edited by jsulm
        #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
        • Karoluss96K Offline
          Karoluss96K Offline
          Karoluss96
          wrote on last edited by
          #21

          OK, now I have at beginning:

          q= QSqlQueryModel()
            table = QSqlTableModel()
          
          JonBJ 1 Reply Last reply
          0
          • Karoluss96K Karoluss96

            OK, now I have at beginning:

            q= QSqlQueryModel()
              table = QSqlTableModel()
            
            JonBJ Online
            JonBJ Online
            JonB
            wrote on 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
            • Karoluss96K Offline
              Karoluss96K Offline
              Karoluss96
              wrote on 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'

              jsulmJ 1 Reply Last reply
              0
              • Karoluss96K Karoluss96

                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'

                jsulmJ Online
                jsulmJ Online
                jsulm
                Lifetime Qt Champion
                wrote on 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
                • Karoluss96K Offline
                  Karoluss96K Offline
                  Karoluss96
                  wrote on last edited by Karoluss96
                  #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'

                  jsulmJ 1 Reply Last reply
                  0
                  • Karoluss96K Karoluss96

                    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'

                    jsulmJ Online
                    jsulmJ Online
                    jsulm
                    Lifetime Qt Champion
                    wrote on 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
                    • Karoluss96K Offline
                      Karoluss96K Offline
                      Karoluss96
                      wrote on 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?

                      jsulmJ 1 Reply Last reply
                      0
                      • Karoluss96K Karoluss96

                        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?

                        jsulmJ Online
                        jsulmJ Online
                        jsulm
                        Lifetime Qt Champion
                        wrote on 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
                        • Karoluss96K Offline
                          Karoluss96K Offline
                          Karoluss96
                          wrote on last edited by Karoluss96
                          #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

                          • Login

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