Russian Qt Forum

Qt => Базы данных => Тема начата: Странник от Август 03, 2011, 13:40



Название: Qt ODBC + MS SQL: прерывается выполнение хранимой процедуры
Отправлено: Странник от Август 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.
грабля найдена, процедура возвращает множественные результирующие наборы. при отключении вывода все работает. если кто успеет подсказать, что с этим можно сделать - не расстроюсь = )


Название: Re: Qt ODBC + MS SQL: прерывается выполнение хранимой процедуры
Отправлено: White Owl от Август 16, 2011, 17:02
QSqlQuery::nextResult()

поможет в случае множественных резалтсетов.


Название: Re: Qt ODBC + MS SQL: прерывается выполнение хранимой процедуры
Отправлено: Странник от Август 16, 2011, 22:10
нет, проблема не в том, что я не могу результат получить - процедура преждевременно завершается.


Название: Re: Qt ODBC + MS SQL: прерывается выполнение хранимой процедуры
Отправлено: White Owl от Август 18, 2011, 17:58
А почему ты считаешь что она завершается? Она не завершается а приостанавливается чтобы отдать первый резалтсет. Вытяни его, потом запроси следующий, процедура продолжится.


Название: Re: Qt ODBC + MS SQL: прерывается выполнение хранимой процедуры
Отправлено: Странник от Август 20, 2011, 12:40
А почему ты считаешь что она завершается? Она не завершается а приостанавливается чтобы отдать первый резалтсет. Вытяни его, потом запроси следующий, процедура продолжится.
потому что трассировка показывает:
Код:
EXIT  SQLExecute  with return code 0 (SQL_SUCCESS)
SQLExecute один, осуществляет вызов хранимой процедуры. да и валится она в разных местах, уже после того, как вернет с десяток резалтсетов. мягко говоря, не ожидаемое поведение. теория интересная, проверю.