По какой-то (ну, по производительности) причине классы «модели» Qt извлекают из базы данных только 256 строк, поэтому, если вы хотите добавить строку в конец набора записей, вы, по-видимому, должны сделать что-то вроде строк
while (model->canFetchMore()) {
model->fetchMore();
}
Это работает, и когда вы выполняете model->insertRow(model->rowCount())
после этого, строка действительно добавляется после последней строки recorset.
Существуют различные другие проблемы, связанные с этим поведением, например, когда вы вставляете или удаляете строки из модели, представление, которое отображает его, перерисовывается с отображением только 256 строк, и вы должны вручную убедиться, что отсутствующие строки снова извлекаются.
Есть ли способ полностью обойти это поведение? Моя модель вряд ли отобразит больше, чем, скажем, 1000 строк, но заставить ее извлекать эти 1000 строк кажется настоящей головной болью. Я понимаю, что это отличная оптимизация производительности, если вам приходится иметь дело с большими наборами записей, но для меня это скорее бремя, чем благо.
Модель должна быть доступна для записи, поэтому я не могу просто использовать QSqlQueryModel вместо QSqlRelationalTableModel.
QSqlTableModel::insertRecord(int row, const QSqlRecord& record)
, я вижу Если строка отрицательна, запись будет добавлена в конец. Таким образом, вместо использованияmodel->rowCount()
вы можете просто передать-1
. Это что-то меняет в вашей проблеме? - person dschulz   schedule 26.05.2012