Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. InsertRow
Qt 6.11 is out! See what's new in the release blog

InsertRow

Scheduled Pinned Locked Moved Unsolved General and Desktop
32 Posts 5 Posters 9.2k Views 1 Watching
  • 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.
  • Christian EhrlicherC Christian Ehrlicher

    @Duy-Khang said in InsertRow:

    do you know how to disable or turn off the these indexs in this picture ?

    Hide the horizontal and vertical header.

    D Offline
    D Offline
    Duy Khang
    wrote on last edited by
    #19

    @Christian-Ehrlicher thank you.

    1 Reply Last reply
    0
    • JonBJ JonB

      @Duy-Khang
      If that column is in the table but you don't want to show it, use void QTableView::hideColumn(int column) to suppress it in your view.

      Oh, I misunderstood what you were wanting to hide in your picture! I thought you meant the first column!

      In which case it's the horizontal header as @Christian-Ehrlicher has pointed you to.

      D Offline
      D Offline
      Duy Khang
      wrote on last edited by
      #20

      @JonB yes, thank you, it works

      1 Reply Last reply
      0
      • JonBJ JonB

        @Duy-Khang
        If that column is in the table but you don't want to show it, use void QTableView::hideColumn(int column) to suppress it in your view.

        Oh, I misunderstood what you were wanting to hide in your picture! I thought you meant the first column!

        In which case it's the horizontal header as @Christian-Ehrlicher has pointed you to.

        D Offline
        D Offline
        Duy Khang
        wrote on last edited by
        #21

        @JonB hi,
        set.png

        how can i change the name of column in picture ?

        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #22

          What names do you want there ?

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          0
          • D Offline
            D Offline
            Duy Khang
            wrote on last edited by Duy Khang
            #23

            @SGaist hi, how can I insert a row after the current row, assuming we don't have any rows at first, I use QSqlTableModel.

            1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by
              #24

              The same as usual.

              As for setting the header data, it's shown in the QSqlTableModel documentation.

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              1 Reply Last reply
              1
              • D Offline
                D Offline
                Duy Khang
                wrote on last edited by
                #25

                yes, i have done it and then how can I insert a row after the current row, assuming we don't have any rows at first, I use QSqlTableModel.

                JonBJ 1 Reply Last reply
                0
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by
                  #26

                  What issue do you have with using insertRow ?

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  1 Reply Last reply
                  2
                  • D Duy Khang

                    yes, i have done it and then how can I insert a row after the current row, assuming we don't have any rows at first, I use QSqlTableModel.

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

                    @Duy-Khang said in InsertRow:

                    how can I insert a row after the current row, assuming we don't have any rows at first

                    In addition to what @SGaist has been saying, how do you have a "current" row to insert after if you don't have any rows to start with?

                    1 Reply Last reply
                    1
                    • A Offline
                      A Offline
                      ArthurPYQT
                      wrote on last edited by
                      #28
                      import sys
                      
                      from PyQt5.QtWidgets import QWidget, QApplication,QTableView, QVBoxLayout,QPushButton
                      from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel,QSqlRecord
                      
                      class demo(QWidget):
                          def __init__(self):
                              super().__init__()
                              lyt = QVBoxLayout()
                              self.setLayout(lyt)
                              tview = QTableView()
                              btn = QPushButton('add')
                              lyt.addWidget(tview)
                              lyt.addWidget(btn)
                              db = QSqlDatabase.addDatabase("QSQLITE")
                              db.setDatabaseName(r"xxx.db")
                              self.model = testModel(db)
                              tview.setModel(self.model)
                              btn.clicked.connect(self.insertNewRecord)
                          
                          def insertNewRecord(self):
                              r = QSqlRecord()
                              r.setValue('name', 'hello')
                              r.setValue('age', 23)
                      
                              if self.model.insertRecord(0, r):
                      
                                  print(self.model.submitAll())
                                  print(self.model.lastError().text())
                              else:
                                  self.model.db.rollback()
                                  print(self.model.lastError().text())
                              self.model.select()
                              
                      class testModel(QSqlTableModel):
                          def __init__(self, db):
                              super().__init__()
                              self.db = db
                           
                              print(self.db.open())
                              self.setTable('test')
                              self.setEditStrategy(QSqlTableModel.OnManualSubmit)
                              print(self.select())
                              print(self.lastError().text())
                              print(self.tableName())
                      
                      if __name__ == '__main__':
                          app = QApplication(sys.argv)
                          t = demo()
                          t.show()
                          sys.exit(app.exec())
                      
                      

                      data is displayed properly, but when i try to insertRecord, something wrong "No fields to update ". tableview not updated, let alone the database.

                      how to insert a record into the table?

                      JonBJ 1 Reply Last reply
                      0
                      • A ArthurPYQT
                        import sys
                        
                        from PyQt5.QtWidgets import QWidget, QApplication,QTableView, QVBoxLayout,QPushButton
                        from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel,QSqlRecord
                        
                        class demo(QWidget):
                            def __init__(self):
                                super().__init__()
                                lyt = QVBoxLayout()
                                self.setLayout(lyt)
                                tview = QTableView()
                                btn = QPushButton('add')
                                lyt.addWidget(tview)
                                lyt.addWidget(btn)
                                db = QSqlDatabase.addDatabase("QSQLITE")
                                db.setDatabaseName(r"xxx.db")
                                self.model = testModel(db)
                                tview.setModel(self.model)
                                btn.clicked.connect(self.insertNewRecord)
                            
                            def insertNewRecord(self):
                                r = QSqlRecord()
                                r.setValue('name', 'hello')
                                r.setValue('age', 23)
                        
                                if self.model.insertRecord(0, r):
                        
                                    print(self.model.submitAll())
                                    print(self.model.lastError().text())
                                else:
                                    self.model.db.rollback()
                                    print(self.model.lastError().text())
                                self.model.select()
                                
                        class testModel(QSqlTableModel):
                            def __init__(self, db):
                                super().__init__()
                                self.db = db
                             
                                print(self.db.open())
                                self.setTable('test')
                                self.setEditStrategy(QSqlTableModel.OnManualSubmit)
                                print(self.select())
                                print(self.lastError().text())
                                print(self.tableName())
                        
                        if __name__ == '__main__':
                            app = QApplication(sys.argv)
                            t = demo()
                            t.show()
                            sys.exit(app.exec())
                        
                        

                        data is displayed properly, but when i try to insertRecord, something wrong "No fields to update ". tableview not updated, let alone the database.

                        how to insert a record into the table?

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

                        @ArthurPYQT
                        Since you call print(self.model.lastError().text()) both when insertRecord(0, r) succeeds and when it fails, do you want to tell us (actually prove) which route your code is following...?

                        A 1 Reply Last reply
                        1
                        • JonBJ JonB

                          @ArthurPYQT
                          Since you call print(self.model.lastError().text()) both when insertRecord(0, r) succeeds and when it fails, do you want to tell us (actually prove) which route your code is following...?

                          A Offline
                          A Offline
                          ArthurPYQT
                          wrote on last edited by
                          #30

                          @JonB self.model.insertRecord(0, r) returns True, self.model.submitAll() returns False, self.model.lastError().text() returns "No fields to update"

                          A 1 Reply Last reply
                          0
                          • A ArthurPYQT

                            @JonB self.model.insertRecord(0, r) returns True, self.model.submitAll() returns False, self.model.lastError().text() returns "No fields to update"

                            A Offline
                            A Offline
                            ArthurPYQT
                            wrote on last edited by ArthurPYQT
                            #31

                            @ArthurPYQT I finally found the solution. it should be r=self.model.record() rather than r=QSqlRecord(). And I 'vd come up with a new question, is QSqlRelationalTableModel a must if I want to display data from two tables and write data back?

                            JonBJ 1 Reply Last reply
                            0
                            • A ArthurPYQT

                              @ArthurPYQT I finally found the solution. it should be r=self.model.record() rather than r=QSqlRecord(). And I 'vd come up with a new question, is QSqlRelationalTableModel a must if I want to display data from two tables and write data back?

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

                              @ArthurPYQT
                              QSqlRelationalTableModel is only for: if you have a foreign key relationship in your database between the two tables, it allows you to display to the user the "mapped" values for viewing/editing. Typical example:

                              • Table A has its own PK plus other columns. One column is a country_id number.
                              • That number is from Table B, which has country_id as its PK plus a country_name column.

                              If you do this via QSqlRelationalTableModel and use a QSqlRelationalDelegate, it will show the "mapped" country name from Table B for the column in Table A which is the country id. And if you allow editing it will present the user with a combobox of all the country names in Table B to pick from when editing the column in Table A.

                              However, it is not mandatory to use QSRTM. You can do viewing/updating with or without. Note that what I have described is all it does: people sometimes expect more of it. In particular, it does not have any support for editing the foreign key table (Table B).

                              1 Reply Last reply
                              2

                              • Login

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