Qt + БД + TableModel
Всем доброго дня, недавно закончил курс по базам данных, сразу же захотел применить их в своей учебной программке.
Цель следующая - есть мой подкласс таблицы от QAbstractTableModel, который помещается на QTableView. В программе есть кнопка - Сохранить, до этого данные сохранялись в txt, как можно сделать, что-бы они сохранялись в базе данных, с возможностью потом загрузить? К примеру используя SQLite.
Интересует больше всего - как правильнее обратиться к созданному файлу БД при загрузке данных из него? Надо ли указывать путь до этого файла, и где?
Правильно ли вообще использовать QAbstractTableModel, или здесь правильнее QSqlTableModel ?
Если что я новичок, буду благодарен за простые и подробные ответы.
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
- Akiv Doros
- 12 листопада 2024 р. 01:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
- molni99
- 26 жовтня 2024 р. 11:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
- molni99
- 26 жовтня 2024 р. 11:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Добрый день.
Вы можете забрать все данные из своей модели, которая наследована от QAbstractTableModel, и сохранить все данные прямым запросом. Также можно использовать и QSqlTableModel.
Учитывая, что вы новичёк, то возможно вам стоит просто ознакомиться с какими-то статьями, которые здесь на сайте присутствуют.
Могу вам предложить посмотреть вот эти статьи, чтобы вы составили общее представление по работе с базами данных в Qt
При установке Qt в комплекте как правило идут примеры, в том числе там есть несколько примеров использования SQLite. Думаю если Вы справились с QAbstractTableModel + сохранением в файл и знаете что такое SQLite, то сразу все станет понятно.
Спасибо, правильно ли я мыслю, что если использовать подкласс QAbstractTableModel, то при сохранении данных в БД можно создать в ней таблицу на 3 столбца: (значение ячейки, строка, столбец) и сохранять туда ненулевые значения из программы ?
И еще, как можно обратиться к моей БД для выгрузки данных из нее?
Если таблица не создана в базе данных, то её предварительно нужно создать. Я вам дал ссылки на статьи, в них используется класс DataBase, в котором есть пример кода для создания таблиц в базе данных SQLite, если таблицы ещё не существуют.
Для редактирования данных в таблицах моно использовать QSqlTableModel.
Что касается вопроса о выгрузке файлов из базы данных, то вы уверены, что там именно файлы хранятся? Может эти файлы ещё генерировать нужно из сщуествующих таблиц?
Этот ваш последний вопрос может потянуть по объяснению на несколько страниц текста и примеров програмного кода ого-го насколько.
И при этом высока вероятность, что ответ окажется не тем, что предполагалось в сути вопроса.
Просто начните что-то делать для начала. Создайте базу данных или подключитесь к существующей и отобразите таблицу.
Простите, я опечатался на счет файлов, хотел написать "данных". Я уже создал таблицу в БД, и сохраняю туда обычные значения. В папке сборки проекта создался файл my_DB.sqlite, и там есть моя таблица со всеми значениями. Вопрос в том, как в коде обратиться к этому файлу, что-бы получить мои данные обратно? (если я не использую QSqlTableModel)
В статье нашел этот метод, это общий случай обращения к файлу БД ?
Если вы хотите отобразить эти данные в виде таблице, то воспользуйтесь QSqlTableModel
Вот я уже давал ссылку на статью Qt/C++ - Урок 004. QSqlTableModel или Как представить таблицу из БД в Qt?
Я много времени тогда потратил, пока подготавливал её и писал. Не хочу повторяться.
В той статье вам нужно внимательно просмотреть класс DataBase, в котором показано, как подключиться к базе данных SQLite.
А также посмотрите, как работать с самой QSqlTableModel и QTableView, чтобы отобразить данные.
Если вы как-то ещё хотите получать данные, и как-то иначе с ними работать, а не только в таблице, то уточните.
Но по факту в той статье есть ответ на этот вопрос. Он в классе DataBase. Там показано подключение к базе данных.
Это пример кода, вам нужно будет модифицировать путь, по которому находится база данных и название файла.
Это пример, поэтому путь к базе данных гвоздями прибит. Но потом, как разберётесь, сможете сделать и относительный путь и получение пути к файлу через файловый диалог
Хорошо, большое спасибо