QSqlQuery,QString, непонятное поведение |
Здравствуйте, гость ( Вход | Регистрация )
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. Есть класс для работы с БД, который содержит метод для получения значения ячейки:
dbq - QSqlQuery Вызываю его таким образом:
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 итерация
|
|
|
MoPDoBoPoT |
21.8.2009, 13:11
Сообщение
#3
|
Участник Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: 9 |
Так столбцов все-таки 13 или 12? Если 12, то ты обращаешься к несуществующему (нумерация с 0 же). Что выдаст это:
И на будущее. Не пользуйся такими конструкциями: for ( int i = 0; i < dbq.numRowsAffected(); i++ ) Здесь функция numRowsAffected() будет вычисляться при каждой итерации. Именно в этой ситуации либо инициализируй переменную до цикла, либо используй while(dbq.next()). Во-вторых функция numRowsAffected() не для SELECT-Statement, а для UPDATE, DELETE... Для SELECT есть size(), если драйвером поддерживается |
|
|
reich |
21.8.2009, 13:19
Сообщение
#4
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 31.7.2009 Пользователь №: 966 Спасибо сказали: 1 раз(а) Репутация: 0 |
Так столбцов все-таки 13 или 12? Если 12, то ты обращаешься к несуществующему (нумерация с 0 же). Что выдаст это:
столбцов всего 29. Но после обращения к 12-му все идет коту под хвост И на будущее. Не пользуйся такими конструкциями: for ( int i = 0; i < dbq.numRowsAffected(); i++ ) Здесь функция numRowsAffected() будет вычисляться при каждой итерации. Именно в этой ситуации либо инициализируй переменную до цикла, либо используй while(dbq.next()). Во-вторых функция numRowsAffected() не для SELECT-Statement, а для UPDATE, DELETE... Для SELECT есть size(), если драйвером поддерживается При моем запросе size() возвращает -1 MoPDoBoPoT, изменил конструкцию с
на
все заработало. Спасибо. |
|
|
Текстовая версия | Сейчас: 30.1.2025, 16:42 |