Как обновить QSqlTableModel после изменения подключения к базе данных изменилось - PullRequest
1 голос
/ 14 декабря 2011

У меня есть класс, полученный из QSqlRelationalTableModel.Я использую базу данных SQLite.И мне нужно изменить файл базы данных.Я закрываю старый файл базы данных, вызываю SetDatabaseName («путь к новому файлу») и открываю новый файл базы данных.Теперь я просто вызываю select () для модели, но она возвращает false.И если я вызываю setTable ("table") и только после этого select (), все работает ... Но имя таблицы одинаковое ...

Я не нашел ни одного метода, который бы позволялсообщить модели, что соединение с базой данных было изменено .... Знаете ли вы лучший способ сообщить модели?


ОК.Я вернулся к этой теме еще раз.

После того, как БД изменена, я должен вызвать setTable () с тем же именем таблицы, чтобы переустановить модель таблицы.И я не нашел лучшего способа переустановить табличное представление, поэтому я вызываю

pTableView->setModel(NULL);
pTableView->setModel(model);

. Это генерирует много ненужных вызовов кода, но в другом случае табличное представление не знает об изменениях в табличной модели (например количество столбцов).

Я не нашел лучшего способа для повторной инициализации QSqlTableModel и QTableView.Некоторые идеи?

Ответы [ 2 ]

2 голосов
/ 28 марта 2013
// create your model(parent=0, QSqlDatabase::database());
// set your table model->setTable("tablename");
tableview->setModel(this->model)
bool ok = model->select() // model should populate itself and refresh tableView as well
0 голосов
/ 15 декабря 2011

Это была моя ошибка :( С помощью источников, которые я нашел, в каких случаях select () возвращает false. И одно имя поля в таблице моей новой базы данных пропускает одну букву :( Итак, QSqlQuery с select вернул ошибку. Вызов setTable обновляетсяимена полей таблицы, поэтому select возвращает true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...