Qt — Основные классы для работы с БД (часть 3)


В видео показаны особенности реализации операций вставки и удаления строк таблицы БД в зависимости от разных СУБД (автоинкрементное поле или генератор). Показана возможность реализации lookup-полей связанных таблиц (класс QSqlRelationalTableModel).

5 Комментарии “Qt — Основные классы для работы с БД (часть 3)

  1. Хотел бы выразить Вам огромную благодарность за Ваши уроки по программированию в среде Qt C++ на Youtube канале. Очень доходчиво и просто о сложных вещах. Это просто искусство! В заумных книгах этого порой так не хватает.
    Я интересуюсь вопросом разработки баз данных на основе СУБД PostgreSQL и хотел бы в полной мере использовать все возможности языка SQL СУБД PostgreSQL в совокупности с разработкой клиентской части в среде Qt C++.
    Я пока нахожусь в самом начале этого пути, но у меня складывается впечатление, что для того чтобы в полной мере использовать возможности СУБД PostgreSQL все таки не стоит ориентироваться на классы QSqlTableModel и QSqlRelationalTableModel, а скорее работать с QSqlQuery и QSqlQueryModell, что и позволит максимально использовать все возможности языка SQL СУБД PostgreSQL и одновременно все преимущества системы Модель — Представление библиотеки Qt C++.
    При этом я конечно понимаю, что Модель — Представление на основе QSqlQueryModell, предназначенная только для чтение данных, потребует доработок, а процессы взаимодействия с базой (чтение, запись, транзакции и пр.) придется делать, что называется в ручную.
    Прошу прощения за мой дилетантский вопрос, но с учетом Вашего богатого опыта прошу высказать свое мнение по данному вопросу.

  2. Огромное спасибо Вам за уроки!
    Можно вопрос новичка?
    Как получить из QSqlRelationalTableModel значение оригинального поля, а не подставленное значение связанной таблицы?
    Значение data выдает подставленное, а для setdata нужен сам индекс.
    (Где то в уроках видел, не помню где. Извините.)
    Спасибо ))

    1. Случайно нашел решение (возможно некорректное)
      // ищем связанную таблицу на необходимое поле
      QSqlTableModel *childModelQ = sqlModel->relationModel(sqlModel->fieldIndex(«искомое поле»));
      //qss — значение поля, index.row() — индекс строки , всегда читаем значение записи 0!
      QString qss= childModelQ->record(index.row()).value(0).toString();

      1. Извините оно не работает. Просто подставляет индекс. Отклоните ответ плиз ))
        Подскажите плиз решение попроще ))

      2. Просто добавляем дополнительное поле — повторяем relations_id как оригинальное значение.

        model->setRelation(mode->fieldIndex(«relations_id»), QSqlRelation(«relations_table», «id», «name, relations_id»));

        Потом обращаемся к нему из модели как обычно.
        Получается в результирующей таблице есть и подставленное значение и оригинальное.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *