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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Неправильная работа QsqlQueryModel->rowCount()  (Прочитано 5102 раз)
Astrologer
Гость
« : Октябрь 06, 2010, 09:55 »

Код:
void QDbfReader::sql_execute(QString query)
{
    QSqlDatabase dbs = QSqlDatabase::addDatabase("QIBASE");
    dbs.setDatabaseName("c:\\database.fdb");
    dbs.setUserName("sysdba");
    dbs.setPassword("masterkey");
    dbs.open();
    model->setQuery(query, dbs);
    int rows = model->rowCount();
    dbs.close();
}
query = "select * from basetable". rows получается равен 256. Хотя проверяю IBExpert - записей  - 399. Где я ошибаюсь? Хотя если записей меньше, например, 186 - то rows возвращает правильное значение.
« Последнее редактирование: Октябрь 06, 2010, 09:57 от Astrologer » Записан
developer
Гость
« Ответ #1 : Октябрь 06, 2010, 10:36 »

Кажеться нужно для модели сделать fetchMore(). Или что-то в етом роде. Модель оумолчанию не тянет все записи, только первих 256, а после fetchMore следующих 256 и т.д.
Записан
Astrologer
Гость
« Ответ #2 : Октябрь 06, 2010, 11:01 »

Именно оно и было. Спасибо. Улыбающийся
Код:
QSqlDatabase dbs = QSqlDatabase::addDatabase("QIBASE");
    dbs.setDatabaseName("c:\\database.fdb");
    dbs.setUserName("sysdba");
    dbs.setPassword("masterkey");
    dbs.open();
    model->setQuery(query, dbs);
    while (model->canFetchMore())
         model->fetchMore();
    int rows = model->rowCount();
    dbs.close();
Записан
RedDog
Гость
« Ответ #3 : Октябрь 06, 2010, 11:23 »

А лучше делать
Код:
SELECT COUNT(*) FROM ....
, да бы не было надобности тягать туда-сюда кучу информации
Записан
Pretorean
Гость
« Ответ #4 : Октябрь 06, 2010, 20:53 »

Именно оно и было. Спасибо. Улыбающийся
Код:
QSqlDatabase dbs = QSqlDatabase::addDatabase("QIBASE");
    dbs.setDatabaseName("c:\\database.fdb");
    dbs.setUserName("sysdba");
    dbs.setPassword("masterkey");
    dbs.open();
    model->setQuery(query, dbs);
    while (model->canFetchMore())
         model->fetchMore();
    int rows = model->rowCount();
    dbs.close();
вот выполнил бы ты этот код на таблице в пару миллионов записей Смеющийся

Код:
SELECT COUNT(*) FROM ....
только так количество нужно получать
Записан
Astrologer
Гость
« Ответ #5 : Октябрь 08, 2010, 14:39 »

Это пока просто для теста. Потом
Код:
int rows = model->rowCount()
не будет. А model не нужна, я ее потом в QTableView отдаю на растерзание, поэтому мне другой запрос не нужен.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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