Russian Qt Forum

Qt => Базы данных => Тема начата: Evgeniya от Май 19, 2010, 08:30



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


Название: Re: Обновление таблицы
Отправлено: Evgeniya от Май 19, 2010, 14:22
Вместо QSqlQueryModel использую QSqlTableModel, тогда все работает быстрее  ;)


Название: Re: Обновление таблицы
Отправлено: Evgeniya от Май 19, 2010, 14:29
А можно вопросик по QSqlTableModel...хочу чтобы у меня данные в таблице отображались отсортированные по нескольким столбцам...есть только метод sort(),который сортирует только по одному столбцу. Как-то не хочется только ради сортировки вьюшку в базе делать... может можно все-таки это в приложении осуществить


Название: Re: Обновление таблицы
Отправлено: alexman от Май 19, 2010, 15:36
model->setQuery(str);
Здесь можно передать запрос с ключом 'ORDER BY ...'.


Название: Re: Обновление таблицы
Отправлено: crossly от Май 19, 2010, 15:40
Вместо QSqlQueryModel использую QSqlTableModel, тогда все работает быстрее  ;)
tablemodel не может работать быстрее хотя бы по тому что она унаследована от querymodel.... хотя в данном случае использование tablemodel оправдано т.к. она умеет кэшировать записи


Название: Re: Обновление таблицы
Отправлено: Evgeniya от Май 19, 2010, 17:38
model->setQuery(str);
Здесь можно передать запрос с ключом 'ORDER BY ...'.
А по другому нельзя???
Просто для класса QSqlTableModel метод setQuery() - закрытый ...


Название: Re: Обновление таблицы
Отправлено: crossly от Май 20, 2010, 13:56
можно.... метод
Код:
void QSqlTableModel::sort ( int column, Qt::SortOrder order )   [virtual]
делает тоже самое.....


Название: Re: Обновление таблицы
Отправлено: Kolobok от Май 20, 2010, 15:35
Можно setFilter( const QString & filter ) для этого использовать. Примерно так:
Код:
setFilter( "1=1 order by 1,2,3" );


Название: Re: Обновление таблицы
Отправлено: crossly от Май 20, 2010, 15:39
это костыль.... sort(...) добавляет order by к запросу...


Название: Re: Обновление таблицы
Отправлено: Kolobok от Май 20, 2010, 15:41
хочу чтобы у меня данные в таблице отображались отсортированные по нескольким столбцам...есть только метод sort(),который сортирует только по одному столбцу.


Название: Re: Обновление таблицы
Отправлено: Evgeniya от Май 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(); нужно ставить??


Название: Re: Обновление таблицы
Отправлено: Kolobok от Май 21, 2010, 14:30
Ну нельзя же настолько ленивой быть. Достаточно посмотреть описание setFilter() в асистенте.

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