Russian Qt Forum

Qt => Базы данных => Тема начата: ivm2008 от Май 16, 2010, 09:58



Название: Вопрос к экспертам по QSqlRelationalTableModel...
Отправлено: ivm2008 от Май 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 я пробовал, другой режим редактирования - пробовал, пробовал даже базу переоткрывать - ничего не помогает.
 


Название: Re: Вопрос к экспертам по QSqlRelationalTableModel...
Отправлено: crossly от Май 18, 2010, 08:44
сделай select() для основной модели


Название: Re: Вопрос к экспертам по QSqlRelationalTableModel...
Отправлено: ivm2008 от Май 18, 2010, 09:39
Спасибо за совет, но просто select(), а так же и reset() не помогают... но все-таки я нашел решение: при добавлении новой записи в первую таблицу надо выполнить следующий апдейт для модели второй таблицы:
Код:
	relationModel(1)->select();
relationModel(2)->select();
submitAll();

и именно без select(). Не очень понимаю при чем тут submitAll(), и почему select() вреден, но это работает  :) правда только в режиме OnManualSubmit. В режимах OnFieldChange и OnRowChange - та же проблема.


Название: Re: Вопрос к экспертам по QSqlRelationalTableModel...
Отправлено: nata267 от Декабрь 21, 2010, 10:50
у меня та же проблема(( ???


Название: Re: Вопрос к экспертам по QSqlRelationalTableModel...
Отправлено: crossly от Декабрь 21, 2010, 11:17
submitAll(); сам делает select() после внесения всех изменений