VB
Vladimir Bervin30 жовтня 2020 р. 06:32
Лишние строки при выборке из базы данных SQLite
Добрый день. Надеюсь, кто-то знает ответ.
Почему если в модели унаследованной от QSqlTableModel в следующем коде использовать
setQuery(qry);
то в представлении появляются пустые строчки, которые в целом не мешают, но их становится всё больше и больше.
Если же использовать вместо этого
beginResetModel(); endResetModel();
то, лишних строчек нет.
Сам код
void Model::selectAll() { items->clear(); QSqlQuery qry; qry.prepare( "SELECT \n" " id, \n" " code, \n" " date, \n" " person, \n" " description \n" " FROM myDB \n" " ORDER BY code DESC; \n" ); if(qry.exec()){ while(qry.next()){ Data *item = new Data(this, qry); addItem(item); } } else { qCritical() << "Cannot execute query!"; QSqlError err = qry.lastError(); qCritical() << err.nativeErrorCode(); qCritical() << err.databaseText().toUtf8().data(); qCritical() << err.driverText().toUtf8().data(); qDebug() << qry.executedQuery(); } // setQuery(qry); beginResetModel(); endResetModel(); }
Причем если вставить qDebug() << Items->Id();, то количество элементов будет то, какое должно быть.
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
AD
- Akiv Doros
- 12 листопада 2024 р. 01:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
m
- molni99
- 26 жовтня 2024 р. 11:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
m
- molni99
- 26 жовтня 2024 р. 11:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Останні коментарі
ИМ
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь Максимов22 листопада 2024 р. 22:51
Evgenii Legotckoi01 листопада 2024 р. 00:37
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов05 жовтня 2024 р. 17:51
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Evgenii Legotckoi25 червня 2024 р. 01:11
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey115 листопада 2024 р. 17:04
NSProject04 червня 2022 р. 13:49
IscanderChe01 листопада 2024 р. 01:43
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
Как-то странно Вы используйте наследование от QSqlTableModel и еще используйте в нем QSqlQuery...
А чем обычный QSqlTableModel не устраивает для вывода всех данных из обной таблицы?
а как вообще создаете модель? и зачам вам там обьект класса Data и что это за класс? если в базе нет пустых строк, то скорее всего у вас ошибки в реализации модели. и почему наследываетесь от QSqlTableModel а не от тойже QSqlQueryModel?
и вообще, как и в каких целях планируете использовать модель?
QSqlTableModel не удаётся редактировать и удалять данные - вот здесь есть исходный код прототипа этого проекта. ( Код )
Класс Data содержит данные. Наследуюсь от QSqlTableModel, так как меняю данные в базе данных, добавляю элементы и редактирую их, удаление почему-то не работает. Класс QSqlQueryModel, как я понял, больше подходит для отображения данных, а не для редактирования.
Я практик, правил не знаю, если код работает, то хорошо. Данный проект работает без видимых ошибок. Проблему лишних строк решил заменой, о которой в данном посте написал. Я просто хочу понять почему всё же лишние строки образуются. В базе данных 288 элементов и уже 32 лишние строки.
все равно моя не понимать.
во первых зачем делать перенос на новую строку после каждого слова в запросе? некоторые БД могут не корректно отработать запрос только от того что он не так создался, а лишние символы уж подавно
во вторых: чем вас не устоил, как уже было замечено, стандартнй QSqlTableModel? что вы пытаетесь сделать с Data, и зачем он нужен? QSqlTableModel позволяет на прямую редактировать.
вы всеравно выполняете редактирование и сохранение в обход QSqlTableModel. зачем вы на столько усложняете себе код?
без знаниния теории, или хотяб чаще заглядывать в документацию - практика большого опыта не даст. толк от написанного когда когда вы не понимаете что там написано и как работает? или не использовать полную силу метода, а писать костыли на то что уже есть и работает на 2-х строчках кода? без изучения теории Вы всегда будет делать много лишней работы и тратить время
Не понятно что значит редактировать и добавлять в обход QSqlTableModel. Как я понял, процесс добавления или редактирования, это сначала добавляем и редактируем модель, потом добавляем или редактируем базу. В моём коде это последовательно и делается. База же не поменяется, если я отредактирую только модель. А Data это класс экземпляра данных. В модели список указателей и методов.
Доступ к элементу данных и переопределённые методы QSqlTableModel для вывода в представление.
Редактирую элемент в списке, затем произвожу изменения в базе. Какая еще может быть логика?
Ну вообще совсем без знания документации трудно что-либо написать. Я просмотрел видеокурс по моделям в Qt, несколько видеоуроков. Немного почитал документацию. Понятно, что где-то не понятно как использовать все возможности класса QSqlTableModel.
можно сразу редактируя ячейку в виджете, будет редактироваться запись в базе. и тогда не нужны все манипуляции с классом Data