Russian Qt Forum

Qt => Базы данных => Тема начата: DiamondRain от Ноябрь 17, 2010, 14:56



Название: QSqlQuery::size()
Отправлено: DiamondRain от Ноябрь 17, 2010, 14:56
Выполняю запрос SELECT. Далее в консоль вывожу size() моей выборки. Результат = -1. Тем не менее, разбирая выборку в цикле, всё отлично выводится. Насчет метода size() в справке написано следующее:

Returns the size of the result (number of rows returned), or -1 if the size cannot be determined or if the database does not support reporting information about query sizes. Note that for non-SELECT statements (isSelect() returns false), size() will return -1. If the query is not active (isActive() returns false), -1 is returned.
To determine the number of rows affected by a non-SELECT statement, use numRowsAffected().

Исходя из этого я не нашел ни одного условия, при котором size() должен быть равен -1. Кстати, isActive() возвращает true.
Фрагмент используемого кода:

Код:
        QSqlQuery query;
        query.exec("SELECT * FROM albums");
        qDebug() << query.size();



Название: Re: QSqlQuery::size()
Отправлено: Пантер от Ноябрь 17, 2010, 15:00
Что за БД?


Название: Re: QSqlQuery::size()
Отправлено: DiamondRain от Ноябрь 17, 2010, 15:04
Что за БД?

SQLite


Название: Re: QSqlQuery::size()
Отправлено: Пантер от Ноябрь 17, 2010, 15:06
Она не поддерживает size.


Название: Re: QSqlQuery::size()
Отправлено: DiamondRain от Ноябрь 17, 2010, 15:08
Она не поддерживает size.

Спасибо за разъяснение! Есть какая-нибудь замена этому методу?


Название: Re: QSqlQuery::size()
Отправлено: crossly от Ноябрь 17, 2010, 15:08
select count


Название: Re: QSqlQuery::size()
Отправлено: Danila_Bagrofff от Декабрь 17, 2010, 14:32
а у ODBC аналогично не поддерживается size?

Почему-то тоже query.size возвращает -1...

Можно поподробнее о SELECT COUNT, приведите простейший пример, пожалуйста.

Код:
int Query::singleSelect(
        QString SQLString,
        QString &string
        )
{
    if(isConnect()<0)
        return ERROR_OPEN_DB;

    lastError = "";
    string = "";
    QSqlQuery query(db); //db это db = QSqlDatabase::addDatabase(typeConnection, nameConnection); //"QODBC", "MyDB"
    bool err = query.exec(SQLString);
    if(err<0)
    {
        lastError = query.lastError().text();
        return ERROR;
    }

    if (query.size()>1)
    {
       lastError = tr("Ошибка! Множественное вхождение элемента!");
       return ERROR_COUNT;
    }
    else if(query.size()==-1)
    {
        lastError = query.lastError().text() + tr("Ошибка! Запрос не дал результатов!" );
        return ERROR_ABSENT;
    }

    while (query.next())
    {
       string = query.value(0).toString();
       //doSomething(string);
    }

    if(string=="")
        return ERROR;

    return ERROR_NO;
}


Название: Re: QSqlQuery::size()
Отправлено: crossly от Декабрь 17, 2010, 14:34
потому что гладиолус...
Цитировать
int QSqlQuery::size () const

Returns the size of the result (number of rows returned), or -1 if the size cannot be determined or if the database does not support reporting information about query sizes. Note that for non-SELECT statements (isSelect() returns false), size() will return -1. If the query is not active (isActive() returns false), -1 is returned.


Название: Re: QSqlQuery::size()
Отправлено: Danila_Bagrofff от Декабрь 17, 2010, 14:43
Ясно, сам тип БД знач такой =)

А можно поподробнее о SELECT COUNT, приведите простейший пример, пожалуйста.



Название: Re: QSqlQuery::size()
Отправлено: crossly от Декабрь 17, 2010, 14:44
странно как вы вообще с БД работаете не зная азов sql
Код:
select count(*) from <table_name>


Название: Re: QSqlQuery::size()
Отправлено: Danila_Bagrofff от Декабрь 17, 2010, 14:54
Да я не очень понял, вы про запрос кол-ва строк именно в бд...
а я не вкурил, искал функционал в кутэ =)


Название: Re: QSqlQuery::size()
Отправлено: DiamondRain от Декабрь 19, 2010, 17:16
Да я не очень понял, вы про запрос кол-ва строк именно в бд...
а я не вкурил, искал функционал в кутэ =)

Кьют, кьют он называется :)