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

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 6 Jul 2022, 11:22 last edited by
    #1

    Hi,
    I have a problem how to put data form sql query. Every query has got a different structure as is come from anothers tables.
    I'm not sure that I have to use QStandardItemModel or/with QStandardItem and how to put query result into TableView

    def zestawienia (self): 
            con= self.dlg.comboBox_6.currentText()
            global model
            model = QStandardItemModel()
            res=QStandardItem()
            if con == Zest[0]:
               sql2 = "SELECT * FROM ZARZADZANIE.ZAMOWIENIA_WG_STATUS_V"
               q=query.exec_(sql2)
               a=self.dlg.tableView_5.setModel(model)#i'm not sure it's need to use
               while query.next():
                   res=QStandardItem(mod.get('STATUS ZAMOWIENIA'))#the same- 'Status zamowienia' is the name of 1st attribute
                   res.insertColumns(2,2)
                   model.appendRow(res)
               self.dlg.tableView_5.show()#to final present data
            if con == Zest[1]:    #2nd question to present difference   
                plan22 = "SELECT * FROM ZARZADZANIE.ZAMOWIENIA where ROK_PLANOWANIA=2022"
                q=query.exec_(plan22)
                a=self.dlg.tableView_5.setModel(model)
                print (a)
                while query.next():
                    res=QStandardItem(mod.get('ID'))
                    res.insertColumns(2,2)
                    print (res)
                self.dlg.tableView_5.show()
    

    Thanks for all helpful answers

    1 Reply Last reply
    0
    • K Offline
      K Offline
      Karoluss96
      wrote on 6 Jul 2022, 11:36 last edited by
      #2

      I've tried sth by adding:

      q=query.exec_(sql2)
                 model.setQuery(q)
                 a=self.dlg.tableView_5.setModel(model)
      

      inspiring by this question in forum:
      https://forum.qt.io/topic/102277/how-to-insert-data-to-table-from-another-table-sql-in-qt/8

      1 Reply Last reply
      0
      • N Offline
        N Offline
        NYBL
        wrote on 6 Jul 2022, 11:51 last edited by
        #3

        please add a minimal reproducible example.

        K 1 Reply Last reply 6 Jul 2022, 11:59
        0
        • N NYBL
          6 Jul 2022, 11:51

          please add a minimal reproducible example.

          K Offline
          K Offline
          Karoluss96
          wrote on 6 Jul 2022, 11:59 last edited by
          #4

          @NYBL You mean by SQL?
          I can't because the database is big and keep sensitive data.
          I make this code for an app for QGIS plug-in, in which every question is make after choosing current option in ComboBox

          J 1 Reply Last reply 6 Jul 2022, 13:22
          0
          • K Karoluss96
            6 Jul 2022, 11:59

            @NYBL You mean by SQL?
            I can't because the database is big and keep sensitive data.
            I make this code for an app for QGIS plug-in, in which every question is make after choosing current option in ComboBox

            J Offline
            J Offline
            JonB
            wrote on 6 Jul 2022, 13:22 last edited by JonB 7 Jun 2022, 13:23
            #5

            @Karoluss96
            You should not be using QStandard... for records from a SQL database. You should use either QSqlTableModel or QSqlQueryModel for the database query and a QTableView with that as a model. Then it should display your received rows/columns. You will not need to use insertColumn() or appendRow() either. the query should fill the model and the view should display what is in the model.

            1 Reply Last reply
            2
            • K Offline
              K Offline
              Karoluss96
              wrote on 7 Jul 2022, 10:57 last edited by Karoluss96 7 Jul 2022, 11:04
              #6

              I'm trying by using your option:

               global model
                      q= QSqlQueryModel()
                      model = QTableView()
                      res=QStandardItem()
                      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)
                         while query.next():
                             a=res.setQuery(q)
                             b=res.insertColumns(a)
                             model.appendRow(b)
                         self.dlg.tableView_5.show()
                      if con == Zest[1]:       
                          plan22 = "SELECT * FROM ZARZADZANIE.ZAMOWIENIA where ROK_PLANOWANIA=2022"
                          query.exec_(plan22)
                          a=q.setQuery(plan22)
                          self.dlg.tableView_5.setModel(a)
                                      print (a)
                                      while query.next():
                                          a=model.setQuery(q)
                                          b=res.insertColumns(a)
                                          model.appendRow(b)
                                      self.dlg.tableView_5.show()
              

              but nothing appears in Table View. Sth should I make wrong?

              J 1 Reply Last reply 7 Jul 2022, 11:09
              0
              • K Karoluss96
                7 Jul 2022, 10:57

                I'm trying by using your option:

                 global model
                        q= QSqlQueryModel()
                        model = QTableView()
                        res=QStandardItem()
                        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)
                           while query.next():
                               a=res.setQuery(q)
                               b=res.insertColumns(a)
                               model.appendRow(b)
                           self.dlg.tableView_5.show()
                        if con == Zest[1]:       
                            plan22 = "SELECT * FROM ZARZADZANIE.ZAMOWIENIA where ROK_PLANOWANIA=2022"
                            query.exec_(plan22)
                            a=q.setQuery(plan22)
                            self.dlg.tableView_5.setModel(a)
                                        print (a)
                                        while query.next():
                                            a=model.setQuery(q)
                                            b=res.insertColumns(a)
                                            model.appendRow(b)
                                        self.dlg.tableView_5.show()
                

                but nothing appears in Table View. Sth should I make wrong?

                J Offline
                J Offline
                jsulm
                Lifetime Qt Champion
                wrote on 7 Jul 2022, 11:09 last edited by
                #7

                @Karoluss96 You should put more context - where is this code actually located? I guess some method?
                The problem is probably that you are creating local variables which are destroyed as soon as they go out of scope.

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

                1 Reply Last reply
                0
                • K Offline
                  K Offline
                  Karoluss96
                  wrote on 7 Jul 2022, 11:20 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

                  J 1 Reply Last reply 7 Jul 2022, 11:31
                  0
                  • K Karoluss96
                    7 Jul 2022, 11:20

                    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

                    J Offline
                    J Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on 7 Jul 2022, 11:31 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
                    • K Offline
                      K Offline
                      Karoluss96
                      wrote on 7 Jul 2022, 11:37 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?

                      J 1 Reply Last reply 7 Jul 2022, 11:48
                      0
                      • K Karoluss96
                        7 Jul 2022, 11:37

                        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?

                        J Offline
                        J Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on 7 Jul 2022, 11:48 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
                        • K Offline
                          K Offline
                          Karoluss96
                          wrote on 7 Jul 2022, 11:57 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

                          J J 2 Replies Last reply 7 Jul 2022, 12:11
                          0
                          • K Karoluss96
                            7 Jul 2022, 11:57

                            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

                            J Offline
                            J Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on 7 Jul 2022, 12:11 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
                            • K Offline
                              K Offline
                              Karoluss96
                              wrote on 7 Jul 2022, 12:33 last edited by
                              #14

                              so where i have to put

                              self.model = QTableView()
                              

                              as you suggested?

                              J 1 Reply Last reply 7 Jul 2022, 12:35
                              0
                              • K Karoluss96
                                7 Jul 2022, 12:33

                                so where i have to put

                                self.model = QTableView()
                                

                                as you suggested?

                                J Offline
                                J Offline
                                jsulm
                                Lifetime Qt Champion
                                wrote on 7 Jul 2022, 12:35 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
                                • K Karoluss96
                                  7 Jul 2022, 11:57

                                  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

                                  J Offline
                                  J Offline
                                  JonB
                                  wrote on 7 Jul 2022, 15:25 last edited by JonB 7 Jul 2022, 15:27
                                  #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
                                  • K Offline
                                    K Offline
                                    Karoluss96
                                    wrote on 8 Jul 2022, 06:27 last edited by Karoluss96 7 Aug 2022, 06:32
                                    #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'

                                    J 1 Reply Last reply 8 Jul 2022, 06:30
                                    0
                                    • K Karoluss96
                                      8 Jul 2022, 06:27

                                      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'

                                      J Offline
                                      J Offline
                                      jsulm
                                      Lifetime Qt Champion
                                      wrote on 8 Jul 2022, 06:30 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
                                      • 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

                                          4/29

                                          6 Jul 2022, 11:59

                                          topic:navigator.unread, 25
                                          • Login

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