crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику tp4 ::: Спасибо сказали: 1 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
29.6.2011, 13:03 QSqlRelationTableModel SetRelation возвращает NULL при добавлении новой строки
Цитата(mishabard @ 28.6.2011, 18:29) *
1. так как selectStatement() virtual protected, то мне необходимо унаследовать свой класс от QSQLRelationalTbableView и переопредилить эту функцию для того чтобы считать запрос, который создается после выполнения model->SetTable("table1") и добавления полей по внешним ключам
kassaModel->setRelation(kassaModel->fieldIndex("idstat"),QSqlRelation("statlist","id","name"));

Да, все верно, только не QSQLRelationalTbableView, а QSqlRelationalTableModel

Цитата(mishabard @ 28.6.2011, 18:29) *
2. После этого мне необходимо подменить этот запрос на свой, правильный красивый с алиасами и т.п.
Как это сделать? model->setQuery("select ......."); функцией унаследованной от QSQLQueryModel?

Получаешь исходный запрос
QString defaultQuery = QSqlRelationalTableModel::selectStatement();

Если связей нет, то возвращаешь defaultQuery , иначе парсишь его регулярками и собираешь заново как тебе нужно.

model->setQuery("select .......") использовать не нужно, твой новый запрос должен возвращаться функцией selectStatement().

Цитата(mishabard @ 28.6.2011, 18:29) *
3. После того как у меня все получилось, я подменю запрос, будет ли моя модель также редактировать таблицу, накладывать фильтр, сортировать данные, которую я указал в самом начале model->SetTable("table1")? Или после редактирования запроса она у меня откажеться в TableViewe редактировать поля стандартно?

Сортировка и фильтры будут работать, т.к. в новый запрос будет включено:
WHERE (<условия фильтра>)
ORDER BY <что-нибудь>

Редактирование не знаю, нужно проверять.

Могу прислать исходники - пиши мыло. Почему-то не могу залить файлы сюда, говорит "Неудачная загрузка. Вам запрещено загружать такой тип файлов".
Только все это проделывалось в качестве эксперимента, в продакшн код в итоге не вошло и, следовательно, не особо тестилось.








http://narod.ru/disk/17533906001/sqlRelati...eModel.rar.html
mishabard,

RSS Текстовая версия Сейчас: 1.12.2022, 17:29