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 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
                                • 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

                                          15/29

                                          7 Jul 2022, 12:35

                                          • Login

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