crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в QSqlQuery и работа с большим кол-вом данных
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
JuryS1806 Дата 30.6.2010, 19:41
 
Цитата(Litkevich Yuriy @ 30.6.2010, 14:02) *
Цитата(panter_dsd @ 30.6.2010, 15:29) *
Выкинь QTableWidget и используй связку QSqlTableModel+QTableView. Все ускорится во много раз.
+1

Да не так часто и используется библиотека материалов, забил один раз все нужные и она больше не нужна... Я уже в принципе доделал разработку, хотелось бы выложить свою программу на обозрение общественности. В кратцах, получился аналог Мебель К3, только под Linux, Mac и Windows.

Еще сейчас приделываю модуль Котедж и окна, мебельный модуль для проектирования кухонь в цвете и в текстуре с освещениями готов полностью.
Litkevich Yuriy Дата 30.6.2010, 13:02
 
Цитата(panter_dsd @ 30.6.2010, 15:29) *
Выкинь QTableWidget и используй связку QSqlTableModel+QTableView. Все ускорится во много раз.
+1
panter_dsd Дата 30.6.2010, 11:29
  Выкинь QTableWidget и используй связку QSqlTableModel+QTableView. Все ускорится во много раз.
Litkevich Yuriy Дата 30.6.2010, 10:33
 
Цитата(JuryS1806 @ 30.6.2010, 3:05) *
Почему на базе Qt нет готовых классов и решений для этих задач.
про какие задачи речь? На все случаи жизни, если в Qt засовывать, то она сильно распухнет.
Алексей1153 Дата 30.6.2010, 6:26
 
Цитата(JuryS1806 @ 29.6.2010, 23:09) *
Единственный минус, тормоза при использовании QTableWidget медленно перелистывает, все окна плавают, как будто он грузит машину. Где-то раньше читал, что его ускоряют при отключении каких-то примечек.... Но не могу ничего пока придумать


Я в таких случаях делал таблицу на экране всего в несколько десятков строк (точнее - ровно столько, сколько видно на экране). Это такое окно для огромной "мысленной" таблицы.
Затем, имеется переменная: хранит, какая строка из "мысленной" таблицы должна быть вверху окна.
Также, имеется кеш (обновляемый по времени) гда хранятся считанные из базы строки. При обновлении кеша производится удаление давно не используемых данных.
Детали мог сейчас не все вспомнить, но суть такая :)

А для возможности обратной связи в одно из полей таблицы (по возможности невидимое) нужно печатать уникальный ключ из базы
JuryS1806 Дата 29.6.2010, 23:05
 
Цитата(Litkevich Yuriy @ 29.6.2010, 22:10) *
если СУБД поддерживает подстановку (binding), то сама СУБД и занимается подстановкой. Если не поддерживает, то в недрах QtSql формируется явный запрос.

Это здорово. Почему на базе Qt нет готовых классов и решений для этих задач.
Типа среды MS Access. А то так делать долго придется. Сначала соединится с базой, потом отработать транзакции, потом закрыть их, потом отключится от нее и т.д. И все отдельными классами делать, чтобы Qt не ругался..... Я к тому что долгий процесс и трудоемкий.

Я сейчас попробовал все то же самое сделать в Access 2003 из под Wine. Работает быстрее чем Qt + SQLITE в 3 раза. Наверное Access использует как раз эти bindValues и все оптимизации, какие только есть.
Litkevich Yuriy Дата 29.6.2010, 21:10
  если СУБД поддерживает подстановку (binding), то сама СУБД и занимается подстановкой. Если не поддерживает, то в недрах QtSql формируется явный запрос.
JuryS1806 Дата 29.6.2010, 20:25
 
Цитата(molchanoviv @ 29.6.2010, 21:16) *
Ты всю табличку разом в виджет выгружаешь? На мой взгляд лучше использовать LIMIT, а при пролистывании таблицы прото заново выполнять запрос. Я думаю так будет быстрее. Хотя я могу и ошибаться ибо не пробовал.


Я вообще еще до конца так и не понял насчет процессов и потоков. Сейчас как-то пальцем в небо. Формирую таблицу, затем делаю qApp()->processEvents, затем ее отображаю, плюс в ней напичкал виджетов - кнопок, цветных форм, ролей с подсказками, но тормозит не из-за этого всего.

Просто при ресайсе и отображении. При перелистывании, даже звук дергается в колонках. На каком-то форуме давно встречал, что парень отключил какую-то примочку и она залетала. Что-то типа resize - eventa. Только где это не пойму.

Цитата(panter_dsd @ 29.6.2010, 7:23) *
Еще используй prepare и bindValue. Это тоже ускорит запросы.

Спасибо за совет, только я вот не пойму, как выполняются SQL-запросы. В драйвер передаются эти самые bindValue или они преобразуются опять-же в QString.
Это мне лень просто Qt-исходники ковырять, думаю как бы не получилось за зря лишних движений. Сейчас очень быстро работает. Даже не замечаю как, 700 кБ формирует за 0.3 сек под макросом.
molchanoviv Дата 29.6.2010, 20:16
  Ты всю табличку разом в виджет выгружаешь? На мой взгляд лучше использовать LIMIT, а при пролистывании таблицы прото заново выполнять запрос. Я думаю так будет быстрее. Хотя я могу и ошибаться ибо не пробовал.
JuryS1806 Дата 29.6.2010, 20:09
  Вообще, приятно удивлен скоростью работы с базой данных при использовании транзакций. К примеру раньше я использовал DBASE IV для своей программы, один файл - одна таблица. Но после sqlite3 я вообще изменил свое мнение о qt в лучшую сторону !

Единственный минус, тормоза при использовании QTableWidget медленно перелистывает, все окна плавают, как будто он грузит машину. Где-то раньше читал, что его ускоряют при отключении каких-то примечек.... Но не могу ничего пока придумать.
К примеру, сейчас я использую так:

tbl = new QTableWidget(0,14);
    tbl->setAutoFillBackground(true);
    tbl->setAcceptDrops(false);
    tbl->setShowGrid(true);

но задание этих свойств ничего не дает. Даже не знаю, что можно отключить, чтобы она забегала.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 18:06