crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QStandartItemModel + setRelation, Использование стандартной модели вместо таблицы из базы данных
mishabard
  опции профиля:
сообщение 8.7.2011, 0:24
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 31
Регистрация: 13.6.2011
Из: Киев
Пользователь №: 2741

Спасибо сказали: 0 раз(а)




Репутация:   0  


Суть следующая:
Есть модель и связанныя с ней таблица
model->setRelation(kassaModel->fieldIndex("idpay"),QSqlRelation("pay","id","name"));
...
Есть связанный виджет который в диалоговом окне меняет занчение в таблице
...
QSqlTableModel *paymodel = model->relationModel(model->fieldIndex("idpay"));
QComboBox * pCombo->setModel(paymodel);
pCombo->setModelColumn(paymodel->fieldIndex("name"));
....
mapper->addMapping(pCombo, model->fieldIndex("name"));
....
Все работает, все замечательно!!!
НО!
Оказалось, что есть довольно много справочников, которые состоят из 2 или 3 значений или строк:
Например:

"T" - "ДА"
"F" - "НЕТ"

или

"R" - "Красный"
"B" - "Черный"
"W" - "Белый"

и т.п.

В базе данных хранятся только ключи и все они CHAR(1). Логику и структуру поменять не получится, приходится приспосабливаться.
ВОПРОС???
Можно ли в
model->setRelation(kassaModel->fieldIndex("idpay"),QSqlRelation("pay","id","name"));
Подставить модель не из базы данных. Созданную в программе. например QStandartItemModel или что- то еще проще, потому как все справочники - это (ключ - название).
Наверно так как я написал -нельзя, но может есть какой то другой подход, использовать справочники "мелкие" не из базы данных, чтоб не нагружать сеть и не перегружать запросы.



Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 8.7.2011, 6:52
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


можно свои делегаты сделать, чтобы каждый отображал пользователю нужную информацию вместо значения в ячейке

П.С.
вообще для БД не рекомендуется строить много коротких справочников, лучше один длинный.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mishabard
  опции профиля:
сообщение 9.7.2011, 22:30
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 31
Регистрация: 13.6.2011
Из: Киев
Пользователь №: 2741

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 8.7.2011, 6:52) *
можно свои делегаты сделать, чтобы каждый отображал пользователю нужную информацию вместо значения в ячейке

я так и делаю. Использую или делегат или обробатываю QSqlRelationalTableModel::data

Цитата(mishabard @ 9.7.2011, 22:19) *
Цитата(Litkevich Yuriy @ 8.7.2011, 6:52) *
можно свои делегаты сделать, чтобы каждый отображал пользователю нужную информацию вместо значения в ячейке

я так и делаю. Использую или делегат или обробатываю QSqlRelationalTableModel::data

Я может не првильно выразился. У меня изменения в базе происходят не через TableView, а через диалоговые окна, в которых стоят связанные делегаты. И если есть справочник, который не находится в базе, а заложен в программе, а таких не мало. То приходится чать полей обновлять через Маперы, а часть руками через Record, писать под каждое поле обработчик.

Вот вопрос можно ли как-то в релятиционные поля добовлять модели не из базы данных. Сижу копаюсь второй день пока, пришла на мысль идея наследовать QSqlRelation. И использовать ту же конструкцию

model->setRelation(kassaModel->fieldIndex("idpay"),QSqlRelation("pay","id","name"));но таблица "pay" - это какая то модель локальная созданная в программе
Как думаете я на правильном пути? Может была уже у кого-то такая задача? Или все делается проще и я просто еще об этом не догадываюсь?


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.7.2011, 22:54
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(mishabard @ 10.7.2011, 1:30) *
Сижу копаюсь второй день пока, пришла на мысль идея наследовать QSqlRelation. И использовать ту же конструкцию
видимо так и придётся делать. по большому счёту работа с Модель/представление + БД у тролей реализована на начальном этапе и никакого развития в этом направлении нет. А если ещё учесть некоторые новости относительно Qt 5
Цитата
QtSql:
Требуются сопровождающие (Maintainers)
то выбранный тобою путь - видимо единственный.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mishabard
  опции профиля:
сообщение 9.7.2011, 23:34
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 31
Регистрация: 13.6.2011
Из: Киев
Пользователь №: 2741

Спасибо сказали: 0 раз(а)




Репутация:   0  


Знаний пока не хватает((( но все равно попробую разобраться.

Спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2024, 15:50