Как программно вставить значение в новую строку QtableView

Я использую QtableView для отображения и редактирования данных из QsqlTableModel. Все отлично: данные из таблицы postgreSQL отображаются, и пользователь может их редактировать и сохранять изменения.

Я хочу добавить строку при нажатии кнопки. Я использую метод insertRecord из моего QslTableModel. Строка правильно добавлена ​​в QTableView.

Моя проблема: я хочу вставить значение из запроса в первую ячейку этой новой строки. (для автоматического заполнения уникального идентификатора).

Это мой код :

def ajoutlgn(self):
    query_idNewLine = QtSql.QSqlQuery(self.db)
    if query_idNewLine.exec_('SELECT sp_idsuivi+1 FROM bdsuivis.t_suivprev_tablo ORDER BY sp_idsuivi DESC LIMIT 1'):
        while query_idNewLine.next():
            identifiant = query_idNewLine.value(0)
            #print identifiant

    record = QtSql.QSqlRecord()
    record.setValue(1,identifiant)
    self.model.insertRecord(self.model.rowCount(), record)

Значение не вставляется в новую строку (но если я ввожу значение вручную, оно работает отлично). Тем не менее, с запросом все в порядке (как я вижу по строке «print identifiant», которая возвращает ожидаемое целое число).

Вы видите, что я делаю неправильно ?

Существуют ли другие способы программной вставки значения в ячейку QTableView?

Или мне нужно использовать QitemDelegate ?

Спасибо за аванс.


person V Damoy    schedule 01.12.2017    source источник
comment
Используйте QSqlQueryModel: model = QSqlQueryModel(), model.setQuery('SELECT sp....'), tv.setModel(model)   -  person eyllanesc    schedule 01.12.2017
comment
Спасибо за Ваш ответ. Это была моя первая попытка. Но мне не удалось сохранить модификации с этим типом модели, и мне сказали, что эта модель забагована в Qt4. И я не могу работать с QT5. Вот почему я использовал QsqlTableModel.   -  person V Damoy    schedule 01.12.2017
comment
Кто вам сказал, что у него есть ошибки в Qt4, вы пробовали? Я пробовал, и в целом у меня не было проблем. многие классы Qt имеют ошибки, как и любая библиотека, и даже так мы ее используем, если мы не сталкиваемся с этими ошибками, проблем нет, и до сих пор я не сталкивался с ними, и вы просили QSqlQuery не делать есть ошибки? :П   -  person eyllanesc    schedule 01.12.2017
comment
уже помню, QsqlQueryModel только читается, но можно сделать небольшую модификацию, чтобы она еще и писалась, позже я опубликую отзыв, делающий возможным запись в БД с той моделью.   -  person eyllanesc    schedule 01.12.2017
comment
Спасибо. Попробую с этой моделью. Я перепутал с QsqlRelationnalTableModel, который безуспешно пробовал. Я с нетерпением жду вашего ответа с возможностью написания. :-)   -  person V Damoy    schedule 01.12.2017


Ответы (1)


Наконец я нашел решение:

Эта строка создает запись, но не запись для моей QsqlTableModel.

    record = QtSql.QSqlRecord()

Я заменил его на этот, и он отлично работает:

    record = self.model.record()
person V Damoy    schedule 05.12.2017