LINUX.ORG.RU

QSqlRelationalTableModel - что с ним не так

 , ,


0

1

QSqlRelationalTableModel не позволяет получить доступ к id полю внешней связи и это создаёт очень много неудобств. Более того сама реализация этого класса весьма сомнительна и создаётся впечатление, что это не законченная поделка (будем говорить прямо).

Возможно вам тоже покажется, что развитие Qt как минимум в части Sql остановилось этак лет 15 назад.

А ведь фреймворк заслуживает развития ибо базовые классы уровня QSqlTabelModel и QTableView предоставляют богатый функционал для реализации ваших запросов.

Итак речь пойдет о версии Qt 4.8.1 (как ни странно), помните такую - Nokia connecting people.

Главная проблема в том, что фреймворк не так прост как кажется. Огромный объем кода, где каждая строчка имеет значение в буквальном смысле этого слова. Все по делу во всем надо разобраться и порог вхождения не пару лет месье…

Предлагаем вашему вниманию развитие классов QSqlTableModel/QTableView, с вашего позволения обзовем их PblSqlRelationalTableModel/PblTableModel. Префикс Pbl мы придумали от имени создателя Pablo (не Public как может показаться), но это все в общем-то неважно, главное отличать классы от родных Qt-ых.

Итак, что мы хотим? Мы хотим в нашем приложении на с++, которое работает с базой данных, QSlite3 к примеру, иметь возможность отрыть любую таблицу в диалоге и увидеть элементы управления: кнопки добавить, копировать, удалить строку. Также нам не помешает увидеть кнопки поиска по колонкам, отбор по значению поля, сортировку по колонке.

Но самое наверное заветное нам хотелось бы увидеть подстановку в поле с внешней связью текстовой замены поля id по данным другой связанной таблицы. И больше никогда не возвращаться к этой проблеме.

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

https://github.com/PavelDorofeev/Fork-Sql-Qt-4.8.1--SQLite-3--relations--calc-fields


Никогда не использовал готовые модели для доступа к БД. Нет смысла тратить на них время. Сделаешь всё на них, а потом понадобится какой-нибудь хитрый запрос сделать и чтобы он не тормозил. И всё. Готовая моделька не потянет и придётся всё переписывать с нуля. Лучше уж сразу делать нормально.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Время покажет, пока на первом этапе функционала хаватает. Там все пожелания очень удобно в переопределении selectStatement решается.

Использую на сегодня в паре коммерческих проектах. Попутно допиливаю.

kkmspb
() автор топика
6 августа 2023 г.