VB
Vladimir Bervin30. Oktober 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
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.Magst du es? In sozialen Netzwerken teilen!
Kommentare
sf
- sdfsdfkp fgskpgokspdog
- 14. Oktober 2024 15:09
C++ - Тест 004. Указатели, Массивы и Циклы
- Ergebnis:90punkte,
- Bewertungspunkte8
МВ
- Максим Васильев
- 2. Oktober 2024 04:14
Qt - Тест 001. Сигналы и слоты
- Ergebnis:68punkte,
- Bewertungspunkte-1
ЛС
- Лев Семенов
- 30. September 2024 11:04
C++ - Тест 001. Первая программа и типы данных
- Ergebnis:53punkte,
- Bewertungspunkte-4
Letzte Kommentare
Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов5. Oktober 2024 07:51
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий Кононенко5. Februar 2024 01:50
Jetzt im Forum diskutieren
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
ИМ
Реализация навигации по разделам Спасибо Евгений!
Игорь Максимов3. Oktober 2024 04:05
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
Кирилл Гусарев27. September 2024 09:09
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
Как-то странно Вы используйте наследование от QSqlTableModel и еще используйте в нем QSqlQuery...
А чем обычный QSqlTableModel не устраивает для вывода всех данных из обной таблицы?
а как вообще создаете модель? и зачам вам там обьект класса Data и что это за класс? если в базе нет пустых строк, то скорее всего у вас ошибки в реализации модели. и почему наследываетесь от QSqlTableModel а не от тойже QSqlQueryModel?
и вообще, как и в каких целях планируете использовать модель?
QSqlTableModel не удаётся редактировать и удалять данные - вот здесь есть исходный код прототипа этого проекта. ( Код )
Класс Data содержит данные. Наследуюсь от QSqlTableModel, так как меняю данные в базе данных, добавляю элементы и редактирую их, удаление почему-то не работает. Класс QSqlQueryModel, как я понял, больше подходит для отображения данных, а не для редактирования.
Я практик, правил не знаю, если код работает, то хорошо. Данный проект работает без видимых ошибок. Проблему лишних строк решил заменой, о которой в данном посте написал. Я просто хочу понять почему всё же лишние строки образуются. В базе данных 288 элементов и уже 32 лишние строки.
все равно моя не понимать.
во первых зачем делать перенос на новую строку после каждого слова в запросе? некоторые БД могут не корректно отработать запрос только от того что он не так создался, а лишние символы уж подавно
во вторых: чем вас не устоил, как уже было замечено, стандартнй QSqlTableModel? что вы пытаетесь сделать с Data, и зачем он нужен? QSqlTableModel позволяет на прямую редактировать.
вы всеравно выполняете редактирование и сохранение в обход QSqlTableModel. зачем вы на столько усложняете себе код?
без знаниния теории, или хотяб чаще заглядывать в документацию - практика большого опыта не даст. толк от написанного когда когда вы не понимаете что там написано и как работает? или не использовать полную силу метода, а писать костыли на то что уже есть и работает на 2-х строчках кода? без изучения теории Вы всегда будет делать много лишней работы и тратить время
Не понятно что значит редактировать и добавлять в обход QSqlTableModel. Как я понял, процесс добавления или редактирования, это сначала добавляем и редактируем модель, потом добавляем или редактируем базу. В моём коде это последовательно и делается. База же не поменяется, если я отредактирую только модель. А Data это класс экземпляра данных. В модели список указателей и методов.
Доступ к элементу данных и переопределённые методы QSqlTableModel для вывода в представление.
Редактирую элемент в списке, затем произвожу изменения в базе. Какая еще может быть логика?
Ну вообще совсем без знания документации трудно что-либо написать. Я просмотрел видеокурс по моделям в Qt, несколько видеоуроков. Немного почитал документацию. Понятно, что где-то не понятно как использовать все возможности класса QSqlTableModel.
можно сразу редактируя ячейку в виджете, будет редактироваться запись в базе. и тогда не нужны все манипуляции с классом Data