crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QSQLITE Драйвер и QuerySize, как узнать количество возвращаемых строк?
grio
  опции профиля:
сообщение 30.11.2009, 11:59
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 87
Регистрация: 11.11.2009
Пользователь №: 1221

Спасибо сказали: 6 раз(а)




Репутация:   0  


В текущей версии QSQLITE драйвера, метод QSqlQuery::Size(); не реализован.
На запрос QSqlDriver::hasFeature(QSqlDriver::QuerySize) возвращается false.

Как еще можно быстро получить количество возвращаемых строк по SQL запросу?

Я хочу сделать Progress Bar для долгого запроса к базе, как это лучше реализавать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
panter_dsd
  опции профиля:
сообщение 30.11.2009, 12:35
Сообщение #2


Жаждущий знаний
***

Группа: Участник
Сообщений: 254
Регистрация: 1.1.2009
Из: Санкт-Петербург
Пользователь №: 474

Спасибо сказали: 32 раз(а)




Репутация:   3  


Используй SELECT count(*).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
512es
  опции профиля:
сообщение 30.11.2009, 13:06
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 135
Регистрация: 31.10.2008
Пользователь №: 407

Спасибо сказали: 5 раз(а)




Репутация:   0  


Цитата(panter_dsd @ 30.11.2009, 13:35) *
Используй SELECT count(*).


а я делаю вот так:
q.exec();
int qsize = 0;
while(q.next()) qsize++;
q.first();
while(q.next()) {

}


Даже и не знаю какой способ лучше)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 30.11.2009, 13:09
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Еще можно так попробовать:
if( m_query->last() )
    m_size = m_query->at() + 1;

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 30.11.2009, 13:28
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


grio, для того, чтобы узнать сколько запрос вернёт, надо использовать запрос кол-ва из самой БД, как сказал panter_dsd,
Цитата(grio @ 30.11.2009, 14:59) *
Я хочу сделать Progress Bar для долгого запроса к базе, как это лучше реализавать?
А это ты вообще не реализуешь через Qt, т.к. весь запрос будет "думать" в БД. Когда БД будет готова отдать данные, она их будет отдавать с большой скоростью, с такой с какой в состоянии получать приложение
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 30.11.2009, 14:07
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Кстати, если операция долгая, попробуй использовать транзакции. Для sqlite cильно ускоряет работу, так как снижается число обращений к диску.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
grio
  опции профиля:
сообщение 30.11.2009, 14:11
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 87
Регистрация: 11.11.2009
Пользователь №: 1221

Спасибо сказали: 6 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 30.11.2009, 13:28) *
А это ты вообще не реализуешь через Qt, т.к. весь запрос будет "думать" в БД. Когда БД будет готова отдать данные, она их будет отдавать с большой скоростью, с такой с какой в состоянии получать приложение


Я не правильно выразился, не для долгого запроса к базе, а для запросов с большим уровнем вложенности.

Цитата(521es)
while(q.next()) qsize++;


512es, ты выбрал далеко не самый быстрый способ подсчитать строки.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.11.2024, 17:55