![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
reich |
![]()
Сообщение
#1
|
Студент ![]() Группа: Новичок Сообщений: 10 Регистрация: 31.7.2009 Пользователь №: 966 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
БД: MSSQL
Qt 4.5.2 Windows XP sp2 Пытаюсь взять данные из MSSQL. Тип поля text. Есть класс для работы с БД, который содержит метод для получения значения ячейки:
dbq - QSqlQuery Вызываю его таким образом:
12 - столбец в таблице БД. dt - структура. resume_dmpt_long - QString; Запрос большой, все значения получаю нормально, а вот при получении этого значения(поле text) происходит непонятно что. Например, запрос возвращает 2 строки. Все записывается в структуру нормально, если заэкранировать получение этого поля text. Если не экранировать, то в цыкле получения данных происходит только первая итерация и затем выход из цыкла. В чем тут может быть проблема? |
|
|
reich |
![]()
Сообщение
#2
|
Студент ![]() Группа: Новичок Сообщений: 10 Регистрация: 31.7.2009 Пользователь №: 966 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Если взять вот такой вот код(выборка та же, что и в предыдущем посте), то корректно работает только до
qDebug() << dbq.value( 11 ); QSqlQuery::numRowsAffected() возвращает 2 Если не получать 12-й элемент, то нормально проходит 2 итерации цыкла. А если с 12-м элементом, то только 1 итерация
|
|
|
MoPDoBoPoT |
![]()
Сообщение
#3
|
Участник ![]() ![]() Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: ![]() ![]() ![]() |
Так столбцов все-таки 13 или 12? Если 12, то ты обращаешься к несуществующему (нумерация с 0 же). Что выдаст это:
И на будущее. Не пользуйся такими конструкциями: for ( int i = 0; i < dbq.numRowsAffected(); i++ ) Здесь функция numRowsAffected() будет вычисляться при каждой итерации. Именно в этой ситуации либо инициализируй переменную до цикла, либо используй while(dbq.next()). Во-вторых функция numRowsAffected() не для SELECT-Statement, а для UPDATE, DELETE... Для SELECT есть size(), если драйвером поддерживается |
|
|
reich |
![]()
Сообщение
#4
|
Студент ![]() Группа: Новичок Сообщений: 10 Регистрация: 31.7.2009 Пользователь №: 966 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Так столбцов все-таки 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, изменил конструкцию с
на
все заработало. Спасибо. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 20.2.2025, 15:20 |