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 4.4k 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.
  • C Christian Ehrlicher
    18 May 2021, 17:58

    @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 18 May 2021, 18:09 last edited by
    #19

    @Christian-Ehrlicher thank you.

    1 Reply Last reply
    0
    • J JonB
      18 May 2021, 17:58

      @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 18 May 2021, 18:21 last edited by
      #20

      @JonB yes, thank you, it works

      1 Reply Last reply
      0
      • J JonB
        18 May 2021, 17:58

        @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 19 May 2021, 16:59 last edited by
        #21

        @JonB hi,
        set.png

        how can i change the name of column in picture ?

        1 Reply Last reply
        0
        • S Offline
          S Offline
          SGaist
          Lifetime Qt Champion
          wrote on 19 May 2021, 17:58 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 19 May 2021, 18:56 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
            • S Offline
              S Offline
              SGaist
              Lifetime Qt Champion
              wrote on 19 May 2021, 19:03 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 19 May 2021, 19:06 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.

                J 1 Reply Last reply 19 May 2021, 19:14
                0
                • S Offline
                  S Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on 19 May 2021, 19:10 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
                    19 May 2021, 19:06

                    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.

                    J Offline
                    J Offline
                    JonB
                    wrote on 19 May 2021, 19:14 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 9 Nov 2022, 10:39 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?

                      J 1 Reply Last reply 9 Nov 2022, 10:51
                      0
                      • A ArthurPYQT
                        9 Nov 2022, 10:39
                        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?

                        J Offline
                        J Offline
                        JonB
                        wrote on 9 Nov 2022, 10:51 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 10 Nov 2022, 01:11
                        1
                        • J JonB
                          9 Nov 2022, 10:51

                          @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 10 Nov 2022, 01:11 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 10 Nov 2022, 01:41
                          0
                          • A ArthurPYQT
                            10 Nov 2022, 01:11

                            @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 10 Nov 2022, 01:41 last edited by ArthurPYQT 11 Oct 2022, 05:14
                            #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?

                            J 1 Reply Last reply 10 Nov 2022, 08:32
                            0
                            • A ArthurPYQT
                              10 Nov 2022, 01:41

                              @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?

                              J Offline
                              J Offline
                              JonB
                              wrote on 10 Nov 2022, 08:32 last edited by JonB 11 Oct 2022, 08:33
                              #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