Russian Qt Forum
Сентябрь 30, 2024, 10:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не работает повторная загрузка модели  (Прочитано 5175 раз)
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.227 секунд. Запросов: 21.