Russian Qt Forum
Ноябрь 23, 2024, 18:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: QTableView и БД с большой таблицей  (Прочитано 17695 раз)
bigirbis
Гость
« Ответ #15 : Январь 15, 2007, 00:15 »

База нужна быстрая, нетребовательная к ресурсам и тупая до безобразия... от того и SQLite
Записан
nova
Гость
« Ответ #16 : Январь 15, 2007, 01:09 »

Цитировать

Имелась в виду динамическая фильтрация...
 Но уже задумался о введении дополнительных ограничений на выборку.
 Просто заказчик хотел бы видеть это именно так...

Заказчик конечно дело святое Улыбающийся
А че сонструкция while это не динамическая фильтрация?

И неужели он ( заказчик ) собирается на екране просматривать содержимое ВСЕЙ базы?
или SQLite не поддерживает элементарные запросы?
В этом отношении, помоему, самый правельны подход был у оракуловского формса,
после открытия формы (таблицы) данные из базы не извлекаются, пользователь в нужных полях вводит интересуюшие его значения, нажимает кнопочку и получает результат. правда если ничего не ввести и нажать кнопочку то можно листать всю таблицу Улыбающийся
Всетаки QSqlTableModel сделан правильно. Врядли нормальный пользователь долистает резултсет до 255 строки. конечно если предусмотрены нормальные инструменты для составления запроса Улыбающийся

Правда я могу ошибатся и сушесвует задача в которой будет более эфективным показать пользователю всю таблицу и пусть сам ищет че ему надо Улыбающийся
Но тогда может поделитесь, что за задача.

Хотя с моей точки зрения, для пользователя, это будет равносильно прочтению "Война и мир", даже если эта база ембедед и всего 50 Мб ![/quote]
Записан
stealth
Гость
« Ответ #17 : Ноябрь 09, 2007, 15:35 »

Странно, почему-то нет возможности у QSqlTableModel задать LIMIT. Через setFilter тоже не получается, т.к. там в итоге запрос получается вида ...AND (LIMIT 0,10)
Очень ведь нужная вещь, почему же тролли забыли про неё?

Кто-нибудь делал постраничный вывод с использованием QT? Поделитесь опытом пожалуйста.
Кнопки навигации по страницам по идёё можно в cornerWidget у TableView засовывать.
Записан
WW
Гость
« Ответ #18 : Ноябрь 09, 2007, 16:13 »

Ну и я свои 5 копеек...
Делал так. Отнаследовал QAbstarctTableModel. В ней при создании(открытии) тянутся на клиента ТОЛЬКО КЛЮЧИ таблицы. подготавливается Query вида "select * from MyTable where Mykey = :key". А в методе data(...) собсно и присходит весь фокус. По индексу выбирается значение ключа и выполняется Query. Причем Query->record() сохраняется статически, чтобы не дергаться для др. полей ЭТОЙ ЖЕ записи.
Кроме того, обрабатывается фильтрация и соритровка. Тогда опять перевыбираются ключи в соответсвии с новыми реалиями жизни. Ключи можно хранить в QList. Или в другом Query. Смотреть по производительности. Вот собсно и все. Решение работает на довально большой и широкой таблице.
« Последнее редактирование: Ноябрь 09, 2007, 16:15 от WW » Записан
SerjVarshavskiy
Гость
« Ответ #19 : Ноябрь 09, 2007, 16:32 »

Странно, почему-то нет возможности у QSqlTableModel задать LIMIT. Через setFilter тоже не получается, т.к. там в итоге запрос получается вида ...AND (LIMIT 0,10)
Очень ведь нужная вещь, почему же тролли забыли про неё?

а что мешает не QSqlTableModel а:
QSqlQueryModel  model;
model->setQuery("... AND LIMIT(n,m)");

tableView->setModel(model);

менять когда нужно n и m
Записан
stealth
Гость
« Ответ #20 : Ноябрь 09, 2007, 22:59 »

очень понравилась идея WW!
SerjVarshavskiy - не хочется терять функционал например QSqlRelationTableModel
Записан
ритт
Гость
« Ответ #21 : Ноябрь 09, 2007, 23:49 »

ВВ, под "ключами" подразумеваюся индексы таблицы или идентификаторы строк?
Записан
WW
Гость
« Ответ #22 : Ноябрь 12, 2007, 11:12 »

ВВ, под "ключами" подразумеваюся индексы таблицы или идентификаторы строк?
Первичный ключ таблицы. если он составной - то реализация малек усложнится.
Записан
ритт
Гость
« Ответ #23 : Ноябрь 12, 2007, 16:09 »

у меня несколько схожая реализация
и есть такая проблема: если столбцов много, когда начинаешь скроллить табличку лифтом, скрол происходит неплавно. это из-за того, что для каждой строки, которую показываем впервые, данные выбираются в методе дата(...)

ВВ, тоже есть такое или как-то обошёл?
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #24 : Ноябрь 13, 2007, 01:21 »


Для Qt+Firebird я использую либу IBPP. Написал классы-обертки для классов Database, Transaction, Statement (Query) и другие классы.

Так вот, в случае Select query, сразу считывается определенное число записей. Если запрашиваются данные, которые еще не считаны, тогда считывается следующая порция. (Есть класс QueryTableModel, который запрашивает данные у Query.)

Т.о. при работе с БД я не использую QtSql вообще. (Поддержка Firebird'a в драйвере ibase хреновая.)

Единственный минус - это то, что общее число записей неизвестно, пока все не выгребешь.

Если для MySQL есть либа, подобная IBPP, можно сделать аналогично. Ну или сразу API юзать.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.211 секунд. Запросов: 23.