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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос к экспертам по QSqlRelationalTableModel...  (Прочитано 4019 раз)
ivm2008
Новичок

Offline Offline

Сообщений: 9


Просмотр профиля
« : Май 16, 2010, 09:58 »

Вот с такой проблемой я столкнулся (Qt 4.6.2, база - SQLite): есть две таблицы:

stations:
id_sub - primary key
name - TEXT

lines:
id - primary key
id_sub1 - INTEGER
id_sub2 - INTEGER
data - TEXT

Для первой таблицы создаю модель от QSqlTableModel и в качестве view использую QComboBox (m_station):

Код:
		m_pStationModel = new QSqlTableModel(this, m_db);
m_station.setModel(m_pStationModel);
m_station.setModelColumn(1);

Для второй таблицы создаю модель от QSqlRelationalTableModel и в качестве view строю таблицу m_pTable... В конструкторе модели строю связку:

Код:
QLinesSqlModel::QLinesSqlModel(int id, QObject *parent, QSqlDatabase db) : QSqlRelationalTableModel(parent, db)
{
setTable("lines");
setRelation(1,  QSqlRelation("stations", "id", "name"));
setRelation(2,  QSqlRelation("stations", "id", "name"));
setFilter(QString("lines.id_sub1 = %1").arg(id));
select();

ну и собственно часть кода, где эта модель используется:

Код:
		m_pLinesModel = new QLinesSqlModel(m_station_id, this, m_db);
m_pLinesModel->setEditStrategy(QSqlTableModel::OnRowChange);
m_pTable->setModel(m_pLinesModel);
m_pTable->setItemDelegate(new QSqlRelationalDelegate(this));

Все работает замечательно, во второй и третьей колонках view при редактировании виден комбо-бокс, там список имен из первой таблицы, строки вставляются... все ок.

Но вот теперь в первую таблицу вставляю новую строку. Чтобы апдейтить view для второй таблицы естественно использую
Код:
	relationModel(1)->select();
        relationModel(2)->select();
Ага, в соответствующих колонках при редактировании это новое имя в комбо-боксе появляется,.. но при попытки выбрать его в качестве нового значения ничего не происходит - при смене фокуса там восстанавливается предыдущее значение... После перезагрузки программы все ок - новое имя можно выбрать. Подскажите плиз кто-нито, в чем тут проблема... reset я пробовал, другой режим редактирования - пробовал, пробовал даже базу переоткрывать - ничего не помогает.
 
Записан
crossly
Гость
« Ответ #1 : Май 18, 2010, 08:44 »

сделай select() для основной модели
Записан
ivm2008
Новичок

Offline Offline

Сообщений: 9


Просмотр профиля
« Ответ #2 : Май 18, 2010, 09:39 »

Спасибо за совет, но просто select(), а так же и reset() не помогают... но все-таки я нашел решение: при добавлении новой записи в первую таблицу надо выполнить следующий апдейт для модели второй таблицы:
Код:
	relationModel(1)->select();
relationModel(2)->select();
submitAll();

и именно без select(). Не очень понимаю при чем тут submitAll(), и почему select() вреден, но это работает  Улыбающийся правда только в режиме OnManualSubmit. В режимах OnFieldChange и OnRowChange - та же проблема.
Записан
nata267
Гость
« Ответ #3 : Декабрь 21, 2010, 10:50 »

у меня та же проблема(( Непонимающий
Записан
crossly
Гость
« Ответ #4 : Декабрь 21, 2010, 11:17 »

submitAll(); сам делает select() после внесения всех изменений
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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