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
Forum Updated to NodeBB v4.3 + New Features

InsertRow

Scheduled Pinned Locked Moved Unsolved General and Desktop
32 Posts 5 Posters 5.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.
  • D Duy Khang

    @JonB
    newrow.png
    do you know how to disable or turn off the these indexs in this picture ?

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

    @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 2 Replies Last reply
    0
    • 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