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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlQuery. обрезается набор получаемых blob данных  (Прочитано 3814 раз)
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-овских полей читать и получать не хочет.

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

« Последнее редактирование: Сентябрь 13, 2012, 16:15 от Danila_Bagrofff » Записан
Danila_Bagrofff
Гость
« Ответ #1 : Сентябрь 13, 2012, 16:13 »

Есть, конечно, предположение, что это связано с драйвером...

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

Как быть?...
Записан
trot
Гость
« Ответ #2 : Сентябрь 13, 2012, 17:38 »

Во первых надо разобраться с терминологией.
Количество полей по строке запроса - два, а не 40 или 500.
40 или 500 я так понимаю это количество записей, которые должны вырнуться в результате выполнения запроса.
Во вторых вы этот запрос выполняли в какой-нибудь программе предназначенной для работы с БД, если да то какой результата там.
Записан
Danila_Bagrofff
Гость
« Ответ #3 : Сентябрь 14, 2012, 09:20 »

в бд этот запрос возвращает около 500 строк, а полей, да, там два, именно в этом запросе =)

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

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

Размеры иконок 1-2 Кб. То есть совсем немного....
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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