QSqlTableModel :: removeRow () не удаляет строки в базе данных SQLite - PullRequest
0 голосов
/ 07 ноября 2018

Я использую Windows, C ++ и Qt 5.11.1. У меня есть простая однотабличная база данных SQLite. Эта таблица "templates" содержит первичный ключ: id INTEGER PRIMARY KEY. Когда я пытаюсь удалить одну строку в "templates" (используя QSqlTableModel), m_model.removeRow(0) возвращает true, а submitAll() возвращает true. Но таблице по-прежнему принадлежит этот ряд. Я обнаружил, что Qt сгенерировал следующий SQL:

DELETE FROM templates WHERE "templates"."id" IS NULL.
Я полагаю, что проблема связана с QSqlRecord::isGenerated. Как я могу исправить эту ошибку?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Извините, причина в переопределенном методе data() в потомке QSqlTableModel. record() требуется метод data(index, Qt::EditRole).

0 голосов
/ 07 ноября 2018

Как QSqlTableModel :: removeRows документация :

Удаления немедленно отправляются в базу данных. Модель сохраняет пустую строку для успешно удаленной строки до обновления с помощью select ().

...