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 Offline
    Karoluss96K Offline
    Karoluss96
    wrote on last edited by
    #8

    It's a part of function to put data from selected sql in combobox to table View.

    Begins of it looks that:

     def zestawienia (self): #obsługa zakładki zestawień
            con= self.dlg.comboBox_6.currentText()
            global model
            q= QSqlQueryModel()
            model = QTableView()
            res=QStandardItem()
            if con == Zest[0]:
    ...
    

    It vision is easy- from combo box show SQL's anwser in TableView below
    na forum.PNG

    jsulmJ 1 Reply Last reply
    0
    • Karoluss96K Karoluss96

      It's a part of function to put data from selected sql in combobox to table View.

      Begins of it looks that:

       def zestawienia (self): #obsługa zakładki zestawień
              con= self.dlg.comboBox_6.currentText()
              global model
              q= QSqlQueryModel()
              model = QTableView()
              res=QStandardItem()
              if con == Zest[0]:
      ...
      

      It vision is easy- from combo box show SQL's anwser in TableView below
      na forum.PNG

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

      @Karoluss96 As I wrote: you are creating local variables, make them class members instead...

      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
        #10

        You mean by put some variables in definition of function - next to (self) in brackets?
        Or put eg. ..setquery and insertColumns at the beginning before if loop?

        jsulmJ 1 Reply Last reply
        0
        • Karoluss96K Karoluss96

          You mean by put some variables in definition of function - next to (self) in brackets?
          Or put eg. ..setquery and insertColumns at the beginning before if loop?

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

          @Karoluss96 For example:

          self.model = QTableView()
          

          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
            #12

            I've done:

             self.q= QSqlQueryModel()
             self.model = QTableView()
            if con == Zest[0]:
                       sql2 = "SELECT * FROM ZARZADZANIE.ZAMOWIENIA_WG_STATUS_V"#zapytanie nie działa :-(
                       query.exec_(sql2)
                       a=q.setQuery(sql2)
                       self.dlg.tableView_5.setModel(a)
            

            but i gains error in loof if: local variable 'q' referenced before assignment

            jsulmJ JonBJ 2 Replies Last reply
            0
            • Karoluss96K Karoluss96

              I've done:

               self.q= QSqlQueryModel()
               self.model = QTableView()
              if con == Zest[0]:
                         sql2 = "SELECT * FROM ZARZADZANIE.ZAMOWIENIA_WG_STATUS_V"#zapytanie nie działa :-(
                         query.exec_(sql2)
                         a=q.setQuery(sql2)
                         self.dlg.tableView_5.setModel(a)
              

              but i gains error in loof if: local variable 'q' referenced before assignment

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

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

              local variable 'q' referenced before assignment

              it is self.q now, not just q...

              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
                #14

                so where i have to put

                self.model = QTableView()
                

                as you suggested?

                jsulmJ 1 Reply Last reply
                0
                • Karoluss96K Karoluss96

                  so where i have to put

                  self.model = QTableView()
                  

                  as you suggested?

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

                  @Karoluss96 In the code you already posted!

                  def zestawienia (self): #obsługa zakładki zestawień
                          con= self.dlg.comboBox_6.currentText()
                          global model
                          self.q= QSqlQueryModel()
                          self.model = QTableView()
                          res=QStandardItem()
                          if con == Zest[0]:
                  

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

                  1 Reply Last reply
                  0
                  • Karoluss96K Karoluss96

                    I've done:

                     self.q= QSqlQueryModel()
                     self.model = QTableView()
                    if con == Zest[0]:
                               sql2 = "SELECT * FROM ZARZADZANIE.ZAMOWIENIA_WG_STATUS_V"#zapytanie nie działa :-(
                               query.exec_(sql2)
                               a=q.setQuery(sql2)
                               self.dlg.tableView_5.setModel(a)
                    

                    but i gains error in loof if: local variable 'q' referenced before assignment

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

                    @Karoluss96
                    You need to understand about things like variable scopes as a part of Python not Qt. Just saying.

                    I see you still have a QStandardItem. I cannot imagine why. As I said, you simply fill your model from SQL and attach a QTableView to it, that's it.

                    And please do not name as model something which is a QTableView, it's incredibly confusing.

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

                      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 1 Reply Last reply
                      0
                      • 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 Offline
                        jsulmJ Offline
                        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 Offline
                            jsulmJ Offline
                            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 Offline
                                JonBJ Offline
                                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 Offline
                                    jsulmJ Offline
                                    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 Offline
                                        jsulmJ Offline
                                        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

                                          • Login

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