Russian Qt Forum

Qt => Базы данных => Тема начата: Drugukur от Июнь 02, 2010, 19:19



Название: QSqlRelationalTableModel или QSqlQueryModel
Отправлено: Drugukur от Июнь 02, 2010, 19:19
Приветствую.
Есть следующая структура таблиц:

TConstructionElements (id, Name)
TConstructionMaterials (id, Name)
TConstructionType (id,Name)

связанная таблица, отображающая отношение предыдущих трех
TConstructions (id, TConstructionElements.id, TConstructionMaterials.id, TConstructionType.id)

и еще одна связанная таблица:
TConstructionIznos (id, TConstructions.id, IznosValue)

Необходимо отобразить все эти таблицы в одном вьюшнике в следующем порядке:
TConstructionElements.Name, TConstructionMaterials.Name, TConstructionType.Name, TConstructionIznos.IznosValue
Все ячейки представляют из себя комбобоксы.
Изначально заполнен только первый столбец (это делается автоматически), остальные заполняются вручную, путем выбора значений в комбобоксах.
Кол-во строк в данной таблице строго зависит от кол-ва строк в самой первой таблице -
TConstructionElements.

Начинка комбобоксов в других столбцах, соответственно напрямую зависит от выбора
в первом столбце.

Каким образом, можно наиболее оптимально реализовать такую структуру?

Насколько я понял, предварительно посмотрев на форумах, модель QSqlRelationalTableModel
не подходит, так она позволяет из связанной таблицы вытащить только один столбец из другой связанной с ней таблицы.
Правильно ли строить решение данной проблемы только на основании QSqlQueryModel?
Можно ли обойтись одним вьюшником или все-таки придется использовать комбинацию из нескольких?

Для каждого столбца видимо также должен быть свой делегат.
Непонятка только в выборе начальной стратегии, т.е. самой основной проблемой является то, что самый левый столбец во вьюшнике
это чистое отображение только одной таблицы TConstructionElements, а все остальные это связанная таблица TConstructionIznos. То есть нужно строить две модели или можно вывернуться только за счет
Sql запросов с использованием только одной модели?

Заранее, спасибо за помощь.