Comments 9
И совет ваш очень вредный, ибо будет «тормозить» просто безбожно.
каждая имеет связь с предыдущей с помощью foreign key через id, т.е. при удалении необходимо каскадно удалять все «дочерние» записи. Это приводит к огромному количеству запросов, работа приложения сильно замедляется...
В SQLite можно настроить автоматическое каскадное удаление по foreign key, так что одного sql-запроса достаточно. Даже, если бы такого не было, то никакая дополнительная абстракция не поможет избежать выполнения нужного числа запросов.
Первый способ крайне опасный, если вы не пишите приложение чисто для себя. Привет sql инъекции. Допускаю, что вы код накидали чисто для примера, но в любом случае не стоит так делать.
Приветствую всех, в QSqlRelationalTableModel мне не нравится несколько моментов (Qt 4.8) , используем с QTableView к примеру:
Вы добавляете новую строку, устанавливаете значение (какой-то текст) relation поля, все Гут. Сохраняете строку (submit, select) и что получаете? Пустое значение в поле.
Попробуйте 4.7. Насколько я помню, в 4.8 этот класс был сломан.
Можно конечно попробовать 4.7. Но смысл? Мое мнение, что троли не доделали развитие QSqlRelationalTableModel на тот момент, когда продали права на Qt. А потом никому не надо было ничего развивать. Поэтому я просто сделал свое развитие PblSqlTableModel и сделал как я это вижу (у меня есть об этом свободном проекте статья на хабре)
Переименовали свои классы в QpSqlRelationalTableModel, т.е. с префиксом Qp.
Используем в коммерческом проекте несколько лет, все в целом устраивает, понемногу допиливаем/шлифуем функционал.
Идея нашего QpSqlRelationalTableModel в том, чтобы в select запросе добавлялось ещё и значение int id внешней связи, кроме тестового представления.
В QpTableView int id визуально скрывается, так что для пользователя ничего внешне не меняется.
Зато это int id теперь у нас всегда под рукой. Он нужен например при копировании строки. Потом когда вы хотите открыть источник тестового представления (т.е. внешнюю таблицу) с позиционированием на элементе с нашим id.
Этот подход решает все проблемы со связанными таблицами. Не надо делать никакие лишние запросы.
Упрощаем работу с базами данных в Qt с помощью QSqlRelationalTableModel