Автор: grio 30.11.2009, 11:59
В текущей версии QSQLITE драйвера, метод QSqlQuery::Size(); не реализован.
На запрос QSqlDriver::hasFeature(QSqlDriver::QuerySize) возвращается false.
Как еще можно быстро получить количество возвращаемых строк по SQL запросу?
Я хочу сделать Progress Bar для долгого запроса к базе, как это лучше реализавать?
Автор: panter_dsd 30.11.2009, 12:35
Используй SELECT count(*).
Автор: 512es 30.11.2009, 13:06
Цитата(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
Еще можно так попробовать:
if( m_query->last() )
m_size = m_query->at() + 1;
Автор: Litkevich Yuriy 30.11.2009, 13:28
grio, для того, чтобы узнать сколько запрос вернёт, надо использовать запрос кол-ва из самой БД, как сказал panter_dsd,
Цитата(grio @ 30.11.2009, 14:59)
Я хочу сделать Progress Bar для долгого запроса к базе, как это лучше реализавать?
А это ты вообще не реализуешь через Qt, т.к. весь запрос будет "думать" в БД. Когда БД будет готова отдать данные, она их будет отдавать с большой скоростью, с такой с какой в состоянии получать приложение
Автор: Kagami 30.11.2009, 14:07
Кстати, если операция долгая, попробуй использовать транзакции. Для sqlite cильно ускоряет работу, так как снижается число обращений к диску.
Автор: grio 30.11.2009, 14:11
Цитата(Litkevich Yuriy @ 30.11.2009, 13:28)
А это ты вообще не реализуешь через Qt, т.к. весь запрос будет "думать" в БД. Когда БД будет готова отдать данные, она их будет отдавать с большой скоростью, с такой с какой в состоянии получать приложение
Я не правильно выразился, не для долгого запроса к базе, а для запросов с большим уровнем вложенности.
Цитата(521es)
while(q.next()) qsize++;
512es, ты выбрал далеко не самый быстрый способ подсчитать строки.