2011-12-14 2 views
1

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

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


Ok. Я снова вернулся к этой теме.

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

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

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

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

+0

и у меня есть еще одна проблема ... можно создать и настроить (установить имя таблицы ...) QSqlTableModel перед открытием базы данных ? Теперь я получаю ошибку, что таблица «таблица» не найдена, даже если она существует в базе данных ... – Funt

ответ

0

Это была моя ошибка :( с помощью источников, которые я нашел, в каких случаях выберите() возвращает ложь. И один имя_поля в таблице моей новой базы данных пропускает одну букву :(Так что, QSqlQuery с выбора возвращаемой ошибки. Устанавливаемое обновляет вызов имена полей таблицы, поэтому выберите возвращает значение True.

2
// 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 
Смежные вопросы