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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt ODBC + MS SQL: прерывается выполнение хранимой процедуры  (Прочитано 4433 раз)
Странник
Гость
« : Август 03, 2011, 13:40 »

доброго времени суток.
Windows, Qt 4.7.3, ODBC3 драйвер, MS SQL Server 2005.
столкнулись со следующей аномалией. имеется хранимая процедура выгрузки данных из БД. работает давно и без проблем.
возникла необходимость вызывать ее с помощью QSqlQuery, и вот тут зарылся северный пушистый зверек. процедура в норме выполняется пару минут, но QSqlQuery::exec() возвращает true уже через десяток секунд. QSqlQuery::lastError(), соответственно, чист. в трассировке драйвера тоже никаких ошибок. тем не менее, выполнение процедуры прерывается на середине.

вопрос философский: что сие значит? куда копать, кого душить?
буду благодарен за любые наводки, советы, случаи из практики.

p.s.
забыл указать, процедура якобы успешно завершается на уровне драйвера
Код:
EXIT  SQLExecute  with return code 0 (SQL_SUCCESS)

p.p.s.
грабля найдена, процедура возвращает множественные результирующие наборы. при отключении вывода все работает. если кто успеет подсказать, что с этим можно сделать - не расстроюсь = )
« Последнее редактирование: Август 03, 2011, 15:09 от Странник » Записан
White Owl
Гость
« Ответ #1 : Август 16, 2011, 17:02 »

QSqlQuery::nextResult()

поможет в случае множественных резалтсетов.
Записан
Странник
Гость
« Ответ #2 : Август 16, 2011, 22:10 »

нет, проблема не в том, что я не могу результат получить - процедура преждевременно завершается.
Записан
White Owl
Гость
« Ответ #3 : Август 18, 2011, 17:58 »

А почему ты считаешь что она завершается? Она не завершается а приостанавливается чтобы отдать первый резалтсет. Вытяни его, потом запроси следующий, процедура продолжится.
Записан
Странник
Гость
« Ответ #4 : Август 20, 2011, 12:40 »

А почему ты считаешь что она завершается? Она не завершается а приостанавливается чтобы отдать первый резалтсет. Вытяни его, потом запроси следующий, процедура продолжится.
потому что трассировка показывает:
Код:
EXIT  SQLExecute  with return code 0 (SQL_SUCCESS)
SQLExecute один, осуществляет вызов хранимой процедуры. да и валится она в разных местах, уже после того, как вернет с десяток резалтсетов. мягко говоря, не ожидаемое поведение. теория интересная, проверю.
« Последнее редактирование: Август 20, 2011, 12:43 от Странник » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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