Russian Qt Forum
Февраля 19, 2025, 01:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не работает повторная загрузка модели  (Прочитано 5308 раз)
registrationfedser87
Гость
« : Августа 07, 2009, 11:53 »

Есть несколько моделей QSqlTableModel. Все грузятся с одной БД. Эти модели устанавливаются на ***view виджеты. В процессе работы иногда необходимо выбирать другую базу на другом компе(по структуре она такая же). Мне необходимо чтобы модели перезагрузили данные с новой БД(при этом я не хочу создавать модель заново-и делаю model->select()). У меня программа падает когда я пытаюсь сделать повторный select. Базу меняю так:
Код
C++ (Qt)
QSqlDatabase db;
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(serverIP);
db.setDatabaseName("baza");
db.setPort(3306);
db.setUserName("tester");
db.setPassword("pass");
 
if (db.open())
{
 dataModel->select();
}
else
{
qCritical() << "Cannot open database:" << db.lastError().text().toAscii();
}
 
Записан
masha
Гость
« Ответ #1 : Августа 07, 2009, 12:30 »

ещё раз

dataModel->setTable();
Записан
registrationfedser87
Гость
« Ответ #2 : Августа 07, 2009, 12:53 »

я не весь код указал(делаю при повтороном получении также как и при первом):
Код
C++ (Qt)
dataModel->setEditStrategy(QSqlTableModel::OnFieldChange);
dataModel->setTable("Channel");
dataModel->select();
 
Записан
MoPDoBoPoT
Гость
« Ответ #3 : Августа 07, 2009, 13:05 »

fedser87, ты наверное используешь QSqlTableModel, в конструктор которого передается ссылка на соединение с БД. Таким образом, меняя подключение к БД (неявно удаляешь старое умалчиваемое соединение, замещая новым), твоя модель имеет невалидно подключение, т.к. ссылается на старое.
« Последнее редактирование: Августа 07, 2009, 14:40 от MoPDoBoPoT » Записан
MoPDoBoPoT
Гость
« Ответ #4 : Августа 07, 2009, 13:10 »

Смена подключения возможно сможет прокатить с объектом QSqlQueryModel, т.к. при каждом запросе ему передается ссылка на соединение (либо через объект QSqlQuery, либо непосредственно). Но это более низкий уровень абстракции и, скорей всего, это тебе не подходит.
Записан
registrationfedser87
Гость
« Ответ #5 : Августа 07, 2009, 13:54 »

Ок,спасибо. Попробую(но хочется с QSqlTableModel)
Записан
MoPDoBoPoT
Гость
« Ответ #6 : Августа 07, 2009, 14:51 »

но хочется с QSqlTableModel
Ну удаляй тогда старую модель и создавай новую:
Код
C++ (Qt)
delete dataModel;
dataModel = new QSqlTableModel(parent);
...
 
Только не забудь заново на эту модель повесить соответствующие представления.
Записан
ритт
Гость
« Ответ #7 : Августа 07, 2009, 16:08 »

унаследуйся от QSqlTableModel, переопредели select (и, возможно, setTable) и обновляй используемый экземпляр QSqlDatabase перед использованием

возможно, это бага QSql - если не забуду, позже проверю...
Записан
registrationfedser87
Гость
« Ответ #8 : Августа 10, 2009, 06:44 »

У меня много представлений и много моделей, переназначать модель представлению при её создании тоже не хочется,попробую переопределить методы.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.06 секунд. Запросов: 20.