Russian Qt Forum

Qt => Базы данных => Тема начата: registrationfedser87 от Август 07, 2009, 11:53



Название: Не работает повторная загрузка модели
Отправлено: 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();
}
 


Название: Re: Не работает повторная загрузка модели
Отправлено: masha от Август 07, 2009, 12:30
ещё раз

dataModel->setTable();


Название: Re: Не работает повторная загрузка модели
Отправлено: registrationfedser87 от Август 07, 2009, 12:53
я не весь код указал(делаю при повтороном получении также как и при первом):
Код
C++ (Qt)
dataModel->setEditStrategy(QSqlTableModel::OnFieldChange);
dataModel->setTable("Channel");
dataModel->select();
 


Название: Re: Не работает повторная загрузка модели
Отправлено: MoPDoBoPoT от Август 07, 2009, 13:05
fedser87, ты наверное используешь QSqlTableModel, в конструктор которого передается ссылка на соединение с БД. Таким образом, меняя подключение к БД (неявно удаляешь старое умалчиваемое соединение, замещая новым), твоя модель имеет невалидно подключение, т.к. ссылается на старое.


Название: Re: Не работает повторная загрузка модели
Отправлено: MoPDoBoPoT от Август 07, 2009, 13:10
Смена подключения возможно сможет прокатить с объектом QSqlQueryModel, т.к. при каждом запросе ему передается ссылка на соединение (либо через объект QSqlQuery, либо непосредственно). Но это более низкий уровень абстракции и, скорей всего, это тебе не подходит.


Название: Re: Не работает повторная загрузка модели
Отправлено: registrationfedser87 от Август 07, 2009, 13:54
Ок,спасибо. Попробую(но хочется с QSqlTableModel)


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


Название: Re: Не работает повторная загрузка модели
Отправлено: ритт от Август 07, 2009, 16:08
унаследуйся от QSqlTableModel, переопредели select (и, возможно, setTable) и обновляй используемый экземпляр QSqlDatabase перед использованием

возможно, это бага QSql - если не забуду, позже проверю...


Название: Re: Не работает повторная загрузка модели
Отправлено: registrationfedser87 от Август 10, 2009, 06:44
У меня много представлений и много моделей, переназначать модель представлению при её создании тоже не хочется,попробую переопределить методы.