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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обновление таблицы  (Прочитано 6013 раз)
Evgeniya
Гость
« : Май 19, 2010, 08:30 »

ДОброго времени суток!!!У меня есть таблица в БД, которая содержит около 7000 строк.Она у меня отображается в QTableView с помощью запроса QSqlQueryModel. И вот После добавления/редактирования записи в этой таьлице я хочу выделить добавленную/редактированную строчку. Как известно, изначально в памяти хранится только 256 строк и соответственно, чтобы выделилась какая-нибудь 2000 строчка нужно после обновления модели
Код
C++ (Qt)
model->setQuery(str);
 
вызвать
Код
C++ (Qt)
while(model->canFetchMore()) model->fetchMore
 
А это очень тормозит процесс обновления таблицы.
Может кто-нибудь подскажет как можно по другому выдти из этой ситуации : Обновить таблицу и выделить отредактированную строчку с большим объемом информации
Записан
Evgeniya
Гость
« Ответ #1 : Май 19, 2010, 14:22 »

Вместо QSqlQueryModel использую QSqlTableModel, тогда все работает быстрее  Подмигивающий
Записан
Evgeniya
Гость
« Ответ #2 : Май 19, 2010, 14:29 »

А можно вопросик по QSqlTableModel...хочу чтобы у меня данные в таблице отображались отсортированные по нескольким столбцам...есть только метод sort(),который сортирует только по одному столбцу. Как-то не хочется только ради сортировки вьюшку в базе делать... может можно все-таки это в приложении осуществить
Записан
alexman
Гость
« Ответ #3 : Май 19, 2010, 15:36 »

model->setQuery(str);
Здесь можно передать запрос с ключом 'ORDER BY ...'.
Записан
crossly
Гость
« Ответ #4 : Май 19, 2010, 15:40 »

Вместо QSqlQueryModel использую QSqlTableModel, тогда все работает быстрее  Подмигивающий
tablemodel не может работать быстрее хотя бы по тому что она унаследована от querymodel.... хотя в данном случае использование tablemodel оправдано т.к. она умеет кэшировать записи
Записан
Evgeniya
Гость
« Ответ #5 : Май 19, 2010, 17:38 »

model->setQuery(str);
Здесь можно передать запрос с ключом 'ORDER BY ...'.
А по другому нельзя???
Просто для класса QSqlTableModel метод setQuery() - закрытый ...
Записан
crossly
Гость
« Ответ #6 : Май 20, 2010, 13:56 »

можно.... метод
Код:
void QSqlTableModel::sort ( int column, Qt::SortOrder order )   [virtual]
делает тоже самое.....
Записан
Kolobok
Гость
« Ответ #7 : Май 20, 2010, 15:35 »

Можно setFilter( const QString & filter ) для этого использовать. Примерно так:
Код:
setFilter( "1=1 order by 1,2,3" );
Записан
crossly
Гость
« Ответ #8 : Май 20, 2010, 15:39 »

это костыль.... sort(...) добавляет order by к запросу...
Записан
Kolobok
Гость
« Ответ #9 : Май 20, 2010, 15:41 »

хочу чтобы у меня данные в таблице отображались отсортированные по нескольким столбцам...есть только метод sort(),который сортирует только по одному столбцу.
Записан
Evgeniya
Гость
« Ответ #10 : Май 21, 2010, 13:37 »

Можно setFilter( const QString & filter ) для этого использовать. Примерно так:
Код:
setFilter( "1=1 order by 1,2,3" );

Спасибо большое!!! так получилось!!
А не подскажите после
Код
C++ (Qt)
setFilter( "1=1 order by 1,2,3" );
 

select(); нужно ставить??
Записан
Kolobok
Гость
« Ответ #11 : Май 21, 2010, 14:30 »

Ну нельзя же настолько ленивой быть. Достаточно посмотреть описание setFilter() в асистенте.

Цитировать
Если модель уже заполнена данными из БД, модель перевыберет их с учётом нового фильтра. В противном случае, фильтр будет применён при следующем вызове select().
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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