Russian Qt Forum

Qt => Базы данных => Тема начата: AlphaGh0St от Декабрь 13, 2012, 17:49



Название: Qt+SQLite поиск в отдельном окне
Отправлено: AlphaGh0St от Декабрь 13, 2012, 17:49
Всем привет!
Суть в следующем: в главном окне программы таблица (QTableView), которая связана с моделью (QSqlTableModel) и содержит данные из таблицы БД.

В отдельном окне хочу сделать поиск.
Окно поиска так же содержит таблицу (QTableView) и в ней должны отображаться все найденные записи, при этом таблица главного окна не должна изменяться во время поиска.

Подскажите, как лучше всего это сделать?
Благодарю.


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: mutineer от Декабрь 13, 2012, 17:57
Используй QSqlQueryModel


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: AlphaGh0St от Декабрь 13, 2012, 18:19
Можно подробнее, как всё это сделать?


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: mutineer от Декабрь 13, 2012, 18:21
Точно так же, как в главном окне, только вместо QSqlTableModel используй QSqlQueryModel. Как ей пользоваться есть в справке. Ну это если под словами "хочу сделать поиск" имеется в виду некий SELECT запрос к базе


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: AlphaGh0St от Декабрь 13, 2012, 18:30
Да, SELECT запрос.
Для QSqlTableModel есть методы QSqlDatabase::addDatabase() и setDatabaseName(), а как связать QSqlQueryModel с БД?


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: mutineer от Декабрь 13, 2012, 18:38
void QSqlQueryModel::setQuery ( const QString & query, const QSqlDatabase & db = QSqlDatabase() )

Документацию не хочешь читать?


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: AlphaGh0St от Декабрь 13, 2012, 19:16
Недоглядел(
Спасибо))


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: AlphaGh0St от Декабрь 13, 2012, 22:10
Возникла ещё одна проблемка, чтобы не создавать новую тему, спрошу здесь.

выполняю запрос:
Код:
SELECT * FROM MainTable ORDER BY Sum;

В SQLiteManager'e запрос успешно выполняется и корректно сортирует данные, а при выполнении этого запроса через QSqlQueryModel, сортировка получается некорректная.

Подскажите, в чём проблема?


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: LEO от Декабрь 14, 2012, 12:30
в чем некорректность сортировки?

Код:
SELECT * FROM MainTable ORDER BY Sum desc;
- по убыванию;

Код:
SELECT * FROM MainTable ORDER BY Sum;
- по возрастанию;




Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: AlphaGh0St от Декабрь 14, 2012, 16:27
Именно такие запросы и выполняю, вот, что получаю:

(http://s001.radikal.ru/i194/1212/2c/81c37d18b497.jpg)
(http://s019.radikal.ru/i607/1212/b7/35c3d0117bc7.jpg)

Как видите, сортировка проходит, но не совсем корректно.


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: mutineer от Декабрь 14, 2012, 16:38
Вижу только что первая картинка отсортирована по коду, вторая не грузится


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: kolob от Декабрь 14, 2012, 18:54
и вторая отсортирована по коду
точно не помню, но в запросе нужно непосредственно указывать столбец по которому сортируешь

Код:
SELECT Sum FROM MainTable ORDER BY Sum;

SELECT * FROM MainTable.Sum ORDER BY Sum;


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: AlphaGh0St от Декабрь 15, 2012, 11:32
Код:
SELECT * FROM MainTable.Sum ORDER BY Sum;
Так не получается, в таблицу данные не выходят, а SQLiteManager пишет, что нет таблицы "MainTable.Sum"


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: kolob от Декабрь 16, 2012, 08:12
Значит надо перечислить все поля которые ты используешь для заполнения таблицы


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: carrygun от Декабрь 17, 2012, 06:10
Можно еще попробовать написать в кавычках `sum`, а то мало ли.


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: Figaro от Декабрь 17, 2012, 07:48
Схема/структура таблицы?


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: AlphaGh0St от Декабрь 17, 2012, 11:53
Подскажите, как перечислить все поля? Через точку?
Код:
SELECT * FROM MainTable.Code.Surname.Name.Sum ORDER BY Sum;
SQLiteManager выдаёт синтаксическую ошибку на точке

(http://s005.radikal.ru/i210/1212/9d/0c046c105704.jpg)


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: kolob от Декабрь 17, 2012, 12:24
А вот так не пробовал:

Код:
SELECT Code, Surname, Name, Sum FROM MainTable ORDER BY Sum;


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: carrygun от Декабрь 17, 2012, 12:47
Можно вот так еще попробовать:
Код:
SELECT * FROM MainTable ORDER BY 4


Название: Re: Qt+SQLite поиск в отдельном окне
Отправлено: AlphaGh0St от Декабрь 18, 2012, 15:54
Код:
SELECT * FROM MainTable ORDER BY 4
Помогло! Всем спасибо за помощь!