Russian Qt Forum

Qt => Базы данных => Тема начата: Danila_Bagrofff от Сентябрь 13, 2012, 16:01



Название: QSqlQuery. обрезается набор получаемых blob данных
Отправлено: Danila_Bagrofff от Сентябрь 13, 2012, 16:01
Есть функция получения группой блобовских данных. В моем случае это иконки и их описания.
Код:
int Query::multipleSelectBlob(
        QString SQLString,
        int numBlob,
        QList<QByteArray> *ba,
        QList<QStringList> *data)
{
    if(isConnect()<0)
        return ERROR_OPEN_DB;

    lastError = "";
    QSqlQuery query(db);
    if(!query.exec(SQLString))
    {
        lastError = query.lastError().text();
        return ERROR;
    }

    QSqlRecord rec = query.record();
    int count = rec.count();

    data->clear();
    ba->clear();
    int pp = query.numRowsAffected();

    //while (query.next())
    for(int j = 0; j < pp; j++)
    {
        if(!query.next())
            continue;

        data->append(QStringList());
        for(int i=0; i < count; i++)
        {
            if(i == numBlob)
                ba->append(query.value(i).toByteArray());
            else
                data->last().append(query.value(i).toString());
        }
   }

    return ERROR_NO;
}

Вызываю
Код:
QList<QByteArray> ba;
    QList<QStringList> lst;

    SQLString = QString("SELECT imIcon, stName FROM dbo.dsTypes WHERE dbo.dsTypes.biAbstract = 0");

    int err = sqlDBLoodsman->multipleSelectBlob(SQLString, &ba, &lst);
    if(err<0)
        return err;

БД MSSQL 2008 R2. Клиент - винда.
Так вот в таблице возвращаемых данных около 500.
А на выходе из функции я получаю только около 40.

На 40-м шаге
if(!query.next())
            continue;
начинает возвращать false и так далее.

Никак не пойму с чем проблема. Если первое поле не blob, а тот же текст - то проблем нет. Все поля грузятся.
Но вот кипу blob-овских полей читать и получать не хочет.

В чем может быть проблема?



Название: Re: QSqlQuery. обрезается набор получаемых blob данных
Отправлено: Danila_Bagrofff от Сентябрь 13, 2012, 16:13
Есть, конечно, предположение, что это связано с драйвером...

Но почему у меня тогда легко возвращаются кипы обычных данных в тысячи строк и десяток полей...

Как быть?...


Название: Re: QSqlQuery. обрезается набор получаемых blob данных
Отправлено: trot от Сентябрь 13, 2012, 17:38
Во первых надо разобраться с терминологией.
Количество полей по строке запроса - два, а не 40 или 500.
40 или 500 я так понимаю это количество записей, которые должны вырнуться в результате выполнения запроса.
Во вторых вы этот запрос выполняли в какой-нибудь программе предназначенной для работы с БД, если да то какой результата там.


Название: Re: QSqlQuery. обрезается набор получаемых blob данных
Отправлено: Danila_Bagrofff от Сентябрь 14, 2012, 09:20
в бд этот запрос возвращает около 500 строк, а полей, да, там два, именно в этом запросе =)

А вот из программы этот запрос сначала говорит, что записей именно столько, сколько надо:
int pp = query.numRowsAffected(); возарщает правильное значение

Но query.next() с 40-го начинает возвращать false.

Размеры иконок 1-2 Кб. То есть совсем немного....