Введение Модуль Qt SQL предоставляет единый высокоуровневый интерфейс для работы с разными СУБД — SQLite, MySQL, PostgreSQL и другими — через систему драйверов. Это позволяет писать код, который…
Введение Формирование SQL-запроса через конкатенацию строк с пользовательским вводом — прямой путь к SQL-инъекции, одной из самых серьёзных и распространённых уязвимостей веб- и десктоп-приложений, работающих с базами данных.…
Введение Для типичной задачи отображения и редактирования таблицы базы данных в табличном виджете Qt предоставляет QSqlTableModel, который автоматически генерирует SQL-запросы для чтения, обновления, вставки и удаления строк, избавляя…
Введение По мере развития приложения схема базы данных меняется — добавляются таблицы, столбцы, индексы. Если изменения схемы применяются вручную и бесконтрольно, разные установки приложения у разных пользователей (или…
Введение Транзакция — группа операций с базой данных, которая должна быть выполнена целиком (commit) или не выполнена вовсе (rollback), без промежуточных, частично применённых состояний. Это критично для операций,…
Введение Прямая работа с QSqlQuery, разобранная в основном цикле статей про SQL, прекрасно подходит для небольших приложений с несколькими запросами — но по мере роста проекта SQL-строки начинают…
Введение В предыдущей статье мы увидели базовый пример UserRepository — в этой статье формализуем паттерн Repository: единый интерфейс доступа к данным конкретного типа сущности (User, Order, Product), скрывающий…
Введение В предыдущих статьях метод mapRowToUser() вручную перечислял каждое поле строки результата запроса — для структуры с десятком полей это многословно и подвержено ошибкам (легко перепутать порядок или…
Введение Когда бизнес-операция затрагивает несколько сущностей одновременно (например, «оформить заказ» должно одновременно создать запись заказа, уменьшить остаток товара на складе и записать движение по счёту), вызов нескольких независимых…
Введение QSqlRelationalTableModel (основной цикл, статья 144) хорошо подходит для простых связей, отображаемых прямо в QTableView, но для произвольной бизнес-логики, не привязанной к конкретному виджету, нужен более гибкий способ…
Нравится qthelper.ru? 💚
Сайт живёт без пейволов и обязательной подписки. Если статьи помогают вам в работе — поддержите проект.