Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2018, 19:12   #1
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию Qt базы данных (связь master-detail)

Приветствую господа ГУРУ среды разработки QT

Имеется 2 таблицы в базе данных связаны между собой по ключевому полю (reference) , есть среда разрабтки QT5 визуальной примочкой QT Creator
Нужно создать простейшие 2 DbGrid-а на форме (Виджете) чтобы данные в них отображались так же, как в основной и подчинённой таблице, то есть основной записи соответствует выборка из подчинённой таблицы.

Перелопатив кучу материала по интернету, кроме как оргназиацию выпадающих списков (ComboBox в ячейке) ничего путного не нашёл.
Использую следующие компоненты и классы

Код:
    QSqlQueryModel  * qmaster = new QSqlQueryModel(0);
    qmaster.setQuery("SELECT id, name, parm1 FROM master_table");
    qmaster.setHeaderData(0, Qt::Horizontal, QObject::trUtf8("ID"));
    qmaster.setHeaderData(1, Qt::Horizontal, QObject::trUtf8("колонка2"));
    qmaster.setHeaderData(2, Qt::Horizontal, QObject::trUtf8("колонка3"));
    qmastertable->setModel(&qmaster);

    QSqlQueryModel  * qdetail  = new QSqlQueryModel(0);
    qdetail.setQuery("SELECT id, reference, parm1 FROM detail_table");
    qdetail.setHeaderData(0, Qt::Horizontal, QObject::trUtf8("ID"));
    qdetail.setHeaderData(1, Qt::Horizontal, QObject::trUtf8("reference"));
    qdetail.setHeaderData(2, Qt::Horizontal, QObject::trUtf8("колонка1"));
    qdetailtable->setModel(&qdetail);
где
qmastertable И qdetailtable - компоненты QTableView

Всё отображается красиво в двух разных окошках но связи нет.
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 23.05.2018, 13:08   #2
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

а код точно работает? смущают вот эти строки
Код:
QSqlQueryModel  * qmaster = new QSqlQueryModel(0);
// ...
qmastertable->setModel(&qmaster);
Код:
QSqlQueryModel  * qdetail  = new QSqlQueryModel(0);
// ...
qdetailtable->setModel(&qdetail);
на сколько помню setModel, принимает указатель. для чего &

Вообще не совсем понятно что вы хотите и что у вас не получается. Вы не можете сформировать запрос? или что?
SAMOUCHKA вне форума Ответить с цитированием
Старый 23.05.2018, 14:59   #3
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Нету там никаких мастер-дитал.
Там есть model-view-delegate. И есть модель, которая основана на SQL запросе. Как из это собрать, че нада - читайте теорию model-view-delegate.
P.S. сам ее терпеть не могу - ужасная вещь.
alexzk вне форума Ответить с цитированием
Старый 27.05.2018, 10:04   #4
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

alexzk SAMOUCHKA
код я действительно переделывал с рабочего в котором обхекты у меня создаются статически (это по поводу &)
По поводу зачем всё нужно и что я вообще хочу... А хочу я ответа на простейший вопрос - "Разве в Qt под Linux невозможно создать обычное нормальное приложение с master-detail связью"

Задача до такой степени примитивна и решается в других средах обработке, что я даже не знаю как её пояснить, но попробую.
Допустим, есть таблица с городами и есть таблица с улицами. В каждой таблице с улицей есть ссылка на таблицу с городом.
Нужно на форме отобразить 2 таблички, причём если я стою на строчке с городом "Москва" я должен во второй табличке видеть улицы города Москва, а есть я перехожу на строчку Казань, то в таблице "detail" должны отображаться все улицы города Казань. То есть отображение обычной master-detail связи в компонентах Qt
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 28.05.2018, 14:44   #5
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

Цитата:
Сообщение от JUDAS Посмотреть сообщение
код я действительно переделывал с рабочего в котором обхекты у меня создаются статически (это по поводу &)
а это что?
Цитата:
Сообщение от JUDAS Посмотреть сообщение
QSqlQueryModel * qmaster = new QSqlQueryModel(0);
тут все просто
У тебя есть SQL база данных с таблицей города и с таблицей улицы. У города есть id. в таблице улиц, есть поле id_города.

В UI у тебя так-же две таблицы, объекты QTableView- города и улицы.
у QTableView есть сигнал clicked(QModelIndex). он испускается при кликанье, по нему мышью. Свяжи этот сигнал со своим слотом.
В этом слоте из QModelIndex получаешь id_города. И исходя из этого строишь SQL запрос для таблицы улиц.

Как то так
SAMOUCHKA вне форума Ответить с цитированием
Старый 28.05.2018, 20:38   #6
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
Сообщение от SAMOUCHKA Посмотреть сообщение
у QTableView есть сигнал clicked(QModelIndex)
то есть банальное байторочерство.. Теперь мне ясно почему линукс системы пользуются авторитетом в очень узкого круга лиц с особым устройством черепа =)))
Ладно Самоучка, а если я (оконечный пользователь) не люблю пользоваться мышкой, и всё набираю с помощью клавиатуры в том числе кнопки вверх и вниз ?
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 29.05.2018, 00:56   #7
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от JUDAS Посмотреть сообщение
то есть банальное байторочерство.. Теперь мне ясно почему линукс системы пользуются авторитетом в очень узкого круга лиц с особым устройством черепа =)))
Ладно Самоучка, а если я (оконечный пользователь) не люблю пользоваться мышкой, и всё набираю с помощью клавиатуры в том числе кнопки вверх и вниз ?
Линукс тут совершенно не причем. В вебе, скажем, совершенно аналогично. Это у вас от дельфи травма Как вы хотите - было ток в дельфи и мс аксесс. Это не правильно, т.к. ... плохо ложится на скл и отдельный сервер БД, а если там 3 звена (типа броузер - апач/пхп-сервер БД), то такая связь вообще тихий ужас.

Upd...думаю погорячился. Такое не только в дельфи было, а в любых средах, где не было сервера sql БД - foxpro/clipper/etc.


А на qt там ...вам нужен делегат поля. Делегат будет отображат, скажем QComboBox, у которого будет еще 1 своя модель, которая будет уже "detail".

Вот, внизу делегат. Не скажу, что там все верно и академично (скорее наоборот), но контрол в таблице оно делает нужный.
https://github.com/alexzk1/astroed/b...viewsmodel.cpp

Последний раз редактировалось alexzk; 29.05.2018 в 01:06.
alexzk вне форума Ответить с цитированием
Старый 29.05.2018, 16:15   #8
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

Цитата:
Сообщение от JUDAS Посмотреть сообщение
Теперь мне ясно почему линукс системы пользуются авторитетом в очень узкого круга лиц с особым устройством черепа =)))
при чем тут Linux? Qt кроссплатформенный фреймворк.
Цитата:
Сообщение от JUDAS Посмотреть сообщение
а если я (оконечный пользователь) не люблю пользоваться мышкой, и всё набираю с помощью клавиатуры в том числе кнопки вверх и вниз ?
Qt и это умеет.

В чем собственно у вас проблема? Для создания двух связаных таблиц фреймворке все нужные компоненты уже есть, ни чего дописывать не надо.
Как связать две таблицы объяснил выше.
SAMOUCHKA вне форума Ответить с цитированием
Старый 31.05.2018, 21:11   #9
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
Это у вас от дельфи травм
alexzk. Во первых спасибо за ответы.
Во вторых, я по жизни практический человек. Если заказчик просит меня создать приложение которое отображает в табличке фамилии сотрудников компании, а во второй табличке из зароботные платы по месяцам, то 90% своих усилий я бросаю на то, чтобы создать структуру БД и написать приложение удобное для пользователя... В среде QT мне приходится 90% своего времени работать с какими то не нужными мне свойствами и моделями, чтобы создать примитивный аналог компоненты DbGrid и 10% времени остаётся на саму предметную область задачи.
Считаю что допиливанием компонент и перманетной пересборкой ядра должны заниматься люди, которые без этих деяний не могут прожить и дня своей жизни.
К сожалению, я к таим людям не отношусь.... травма говорите - можете так называть готовую компоненту, которая позволяет программисту думать о поставленной задаче а не о прелестях допиливания Линукс.

п.с. Qt4 под Windows это жесть жестяная. Очень жалею тех людей, которые занимаются изобретением велосипеда в Винде изобретённого лет 20 назад.
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 31.05.2018, 21:43   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну ДбГрид в Дельфи-то может и хорош для стандартного CRUD, но примерно на этом преимущества и кончаются.

Например с Layout в VCL все плохо.
А если старая Дельфи, то вообще кучи полезных вещей не завозили (аж до 2009). Ни Дженериков, ни хеш-сетов/мапов, ни лямбд.
Ну и всякие красивости в GUI тоже намного проще в Qt делать (даже в стандартном Widgets без QtQuick/QML из 5+), даже без сторонних компонентов.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связь Master - Detail vVladislav Помощь студентам 0 31.12.2016 14:46
fibplus master-detail условие в detail tarakan1983 БД в Delphi 15 02.11.2014 16:10
Combobox и Master-Detail Максим1818 БД в Delphi 4 13.02.2014 10:10
Master Detail. добавление редактирование t.baychorov БД в Delphi 1 10.12.2011 14:23
Master-detail DELPHI+FIREBIRD Liones БД в Delphi 1 30.11.2010 13:27