crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QSqlQuery,QString, непонятное поведение
reich
  опции профиля:
сообщение 21.8.2009, 10:43
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 31.7.2009
Пользователь №: 966

Спасибо сказали: 1 раз(а)




Репутация:   0  


БД: MSSQL
Qt 4.5.2
Windows XP sp2

Пытаюсь взять данные из MSSQL. Тип поля text.
Есть класс для работы с БД, который содержит метод для получения значения ячейки:
QString RDatabase::value(int i, int r){
    if ( r != 0 ) dbq.next();
    return dbq.value( i ).toString();
}

dbq - QSqlQuery
Вызываю его таким образом:
dt.resume_dmpt_long   = dbc.value( 12 );

12 - столбец в таблице БД.
dt - структура.
resume_dmpt_long - QString;
Запрос большой, все значения получаю нормально, а вот при получении этого значения(поле text) происходит непонятно что.
Например, запрос возвращает 2 строки. Все записывается в структуру нормально, если заэкранировать получение этого поля text.
Если не экранировать, то в цыкле получения данных происходит только первая итерация и затем выход из цыкла.
В чем тут может быть проблема?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
reich
  опции профиля:
сообщение 21.8.2009, 11:19
Сообщение #2


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 31.7.2009
Пользователь №: 966

Спасибо сказали: 1 раз(а)




Репутация:   0  


Если взять вот такой вот код(выборка та же, что и в предыдущем посте), то корректно работает только до
qDebug() << dbq.value( 11 );
QSqlQuery::numRowsAffected() возвращает 2
Если не получать 12-й элемент, то нормально проходит 2 итерации цыкла. А если с 12-м элементом, то только 1 итерация
#include <QtCore/QCoreApplication>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtCore/QVariant>
#include <QtCore/QDebug>

int main( int argc, char *argv[] ){
    QCoreApplication app( argc, argv );
    QSqlDatabase dbs = QSqlDatabase::addDatabase( "QODBC", "test" );
    dbs.setDatabaseName( "DRIVER={SQL Server};Server=NEPTUNE;Database=Stat;Trusted_Connection=yes" );
    if ( dbs.open() ) qDebug() << "Connected";
    else qDebug() << "Connection fail";

    QSqlQuery dbq = dbs.exec( "SELECT * FROM Nedostachi WHERE Terminal LIKE('%3826%')" );
    for ( int i = 0; i < dbq.numRowsAffected(); i++ ){
        dbq.next();
        qDebug() << "-------------------: " << i;
        qDebug() << dbq.value( 0 );
        qDebug() << dbq.value( 1 );
        qDebug() << dbq.value( 2 );
        qDebug() << dbq.value( 3 );
        qDebug() << dbq.value( 4 );
        qDebug() << dbq.value( 5 );
        qDebug() << dbq.value( 6 );
        qDebug() << dbq.value( 7 );
        qDebug() << dbq.value( 8 );
        qDebug() << dbq.value( 9 );
        qDebug() << dbq.value( 10 );
        qDebug() << dbq.value( 11 );
        qDebug() << dbq.value( 12 );
    }

    dbs.close();
    //return app.exec();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.4.2024, 8:35