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