Михаиллл21. November 2018 03:07
Как использовать поиск "или" в QSqlTableModel для SQLite
Здравствуйте.
У меня есть поле со многими checkBox. При выборе нескольких checkBox нужно реализовать поиск в SQLite c помощью QSqlTableModel::setSort() так, чтобы выполнилось условие или тут нашло, или тут, или тут или везде.
Рекомендуємо хостинг 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 22:09
C++ - Тест 004. Указатели, Массивы и Циклы
- Ergebnis:90punkte,
- Bewertungspunkte8
МВ
- Максим Васильев
- 2. Oktober 2024 11:14
Qt - Тест 001. Сигналы и слоты
- Ergebnis:68punkte,
- Bewertungspunkte-1
ЛС
- Лев Семенов
- 30. September 2024 18: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 14: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 09:50
Jetzt im Forum diskutieren
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
ИМ
Реализация навигации по разделам Спасибо Евгений!
Игорь Максимов3. Oktober 2024 11: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 16:09
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
Вот пример моего кода:
При изменении содержимого lineEdit происходит установка фильтра,
Спасибо.
В 4 строчке ZN и FN это названия столбцов?
Да это название столбцов
Что то у меня не работает.
Если делать так, то запрос выполняется
а если так, то почему-то не выполняется условие или
Тестируйте запросы в менеджере БД, а потом что все после WHERE используйте как аргумент setFilter.
Не плохо бы было увидеть саму таблицу и задачу которая вам необходима для установки фильтра
Я проверял названия столбцов.
Вот код бд
PRAGMA foreign_keys = 0;
CREATE TABLE sqlitestudio_temp_table AS SELECT *
FROM SQLliteResumeArray;
DROP TABLE SQLliteResumeArray;
CREATE TABLE SQLliteResumeArray (
NumberID INTEGER PRIMARY KEY AUTOINCREMENT
NOT NULL
UNIQUE,
Name TEXT,
Gender TEXT,
Age INTEGER,
DateOfBirth DATE,
PhoneNumber TEXT,
Email TEXT,
City TEXT,
BusinessTrip TEXT,
PostDesired TEXT,
Salary INTEGER,
CVPost TEXT,
NameCompany TEXT,
Experiance TEXT,
Languages TEXT,
AdditionalInformation TEXT,
Education TEXT,
Skills TEXT,
Comments TEXT,
Resume TEXT
);
INSERT INTO SQLliteResumeArray (
NumberID,
Name,
Gender,
Age,
DateOfBirth,
PhoneNumber,
Email,
City,
BusinessTrip,
PostDesired,
Salary,
CVPost,
NameCompany,
Experiance,
Languages,
AdditionalInformation,
Education,
Skills,
Comments,
Resume
)
SELECT NumberID,
Name,
Gender,
Age,
DateOfBirth,
PhoneNumber,
Email,
City,
BusinessTrip,
PostDesired,
Salary,
CVPost,
NameCompany,
Experiance,
Languages,
AdditionalInformation,
Education,
Skills,
Comments,
Resume
FROM sqlitestudio_temp_table;
DROP TABLE sqlitestudio_temp_table;
CREATE INDEX IndexResumeArray ON SQLliteResumeArray (
NumberID,
Name,
Age,
DateOfBirth,
PostDesired,
CVPost,
PhoneNumber,
Email,
City,
Salary,
NameCompany,
Education,
Languages,
Experiance,
Gender,
AdditionalInformation,
Comments,
Resume,
BusinessTrip,
Skills
);
PRAGMA foreign_keys = 1;
Сделал базу по вашей таблице
Запрос работает.
Проверьте в своем менеджере БД, возможно у вас база пустая.
во вложении SQL файл с вашей таблицей. Выполните импорт и пробуйте.
Спасибо.
Извините за беспокойство.
Просто запрос написал с маленькой буквы, а в бд он с большой.
Что бы избежать подобных трудностей я всегда тестирую запросы напрямую а потом уже использую их в Qt
Скажите пожалуйста, как добавить по столбу с INTEGER поиск от int a; до int b; ?
разобрался, так
Еще можно так
Или так
Да, ваш вариант правильный, а мой не работал, т.к. оказалось QSqlTableModel запоминает только последний setFilter().
А можно ли сделать сначала один запрос setFilter, а потом искать уже в найденном еще одним setFilter ,и так дальше?
Если не сложно по конкретнее задачу поставьте, на примере таблицы что у вас есть.
Нужно писать вложенные запросы. Или очень сложные фильтры конкретно для QSqlTableModel. Если хотите сохранить предыдущий запрос, то выполняйте это вручную в какую-нибудь переменную.
Ну или создавать временные таблицы в базе данных сырыми запросами, но это ещё сложнее будет.
На примере этой таблицы:
Сначала Age от 30 до 40
Потом Languages Languages LIKE ('Russian%')
Потом Languages City LIKE ('Москва%')
И так дальше. Просто количество фильтров не ограниченно и критерии поиска могут быть разнообразны.
С помощью вложенных запросов врятли получится так написать.
Если в переменную записывать, выйдет слишком громоздко и не оптимально будет идти поиск.
А как это сделать с помощью сложных фильтров QSqlTableModel?
Тогда использовать QSortFilterProxyModel
https://doc.qt.io/qt-5/qtwidgets-itemviews-customsortfiltermodel-example.html
Либо пересмотреть структуру БД, для оптимизации построения запросов.
Похоже что придется создавать временную таблицу.
Новую таблицу нужно создавать через QSqlQuery?
Не знаете, как новой таблице дать данные из setFilter()?
Пытаюсь создать временную таблицу так, но выдает ошибку QSqlError("1", "Unable to execute statement", "no such column: Name")
Если у вас фильтрация таблицы из разных фильтров, то лучше всё-таки попытаться написать фильтр правильно, например
ну и так далее, главное правильно сформировать фильтрующую запись. Это будет формирование более сложного запроса, но это будет всё-таки легче, чем использовать временную таблицу.
Спасибо.
А можно ли сделать поиск не чувствительным к регистру
У вас база данных SQLite?
Как я понимаю, у неё нет встроенных механизмов, поэтому нужно извращаться, например так
SQLite из коробки не поддерживает кириллицу в UPPER :-(
То есть, решение из разряда фантастики стандартными средствами для SQLite?
мне срочно нужно добавлять на сайт смайлики... фейспалма очень не хватает...
А как такой запрос отразится на скорости поиска?
И скажите пожалуйста, как это решение можно добавить в запрос
я думаю, если заменить SQLite на другую БД, например postgresql, то можно будет стандартными средствами этот поиск сделать, без таких извращений. И работать будет быстрее точно. Но пока это у вас не является узким местом, то и не замрочивайтесь. Преждевременная оптимизация тоже не нужна.
А вы не знаете, как в postgresql сделать автозаполнение столбца с ключом?
AUTOINCREMENT
P/S/ этот ваш последний вопрос уже не имеет прямого отношения к фильтрам в таблице, создавайте, пожалуйста, новые темы для новых вопросов.