Russian Qt Forum

Qt => Базы данных => Тема начата: Astrologer от Октябрь 06, 2010, 09:55



Название: Неправильная работа QsqlQueryModel->rowCount()
Отправлено: 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 возвращает правильное значение.


Название: Re: Неправильная работа QsqlQueryModel->rowCount()
Отправлено: developer от Октябрь 06, 2010, 10:36
Кажеться нужно для модели сделать fetchMore(). Или что-то в етом роде. Модель оумолчанию не тянет все записи, только первих 256, а после fetchMore следующих 256 и т.д.


Название: Re: Неправильная работа QsqlQueryModel->rowCount()
Отправлено: Astrologer от Октябрь 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();


Название: Re: Неправильная работа QsqlQueryModel->rowCount()
Отправлено: RedDog от Октябрь 06, 2010, 11:23
А лучше делать
Код:
SELECT COUNT(*) FROM ....
, да бы не было надобности тягать туда-сюда кучу информации


Название: Re: Неправильная работа QsqlQueryModel->rowCount()
Отправлено: Pretorean от Октябрь 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();
вот выполнил бы ты этот код на таблице в пару миллионов записей ;D

Код:
SELECT COUNT(*) FROM ....
только так количество нужно получать


Название: Re: Неправильная работа QsqlQueryModel->rowCount()
Отправлено: Astrologer от Октябрь 08, 2010, 14:39
Это пока просто для теста. Потом
Код:
int rows = model->rowCount()
не будет. А model не нужна, я ее потом в QTableView отдаю на растерзание, поэтому мне другой запрос не нужен.