crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Oracle и QSqlQuery: как корректно убить запрос?
zloy_d
  опции профиля:
сообщение 29.10.2009, 9:53
Сообщение #1


Новичок


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

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




Репутация:   0  


Дано:
1. Открываю соединение с БД, создаю запрос.
2. В треде этот запрос исполняется, причем довольно долго ("INSERT INTO...", время исполнения около получаса).
3. Имеется диалог с кнопочкой "Отмена", который индицирует ход запроса и выводит ошибки и т.д.

БД - Oracle 9, если это важно.

Задача: по нажатию "Отмена" корректно прибить запрос, который находится в стадии исполнения (работает exec()).

Пробовал прибивать тред и через указатель на QSqlQuery очищать его, а также закрывать соединение. Но это не работает, сессия Oracle все равно висит и находится в статусе active, т.е. запрос продолжает работать. Все действия над этим соединением (QSqlDatabase) приводят к подвисанию основного треда. Я конечно могу открывать второй, третий и т.д. экземпляры соединения и далее работать с ними, но это не катит, т.к. плодятся сессии и к тому же лочатся таблицы, которые я задействовал в том запросе (т.е. работать с ними я все равно не могу).

Есть идеи как убить запрос? Желательно средствами Qt...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.10.2009, 14:03
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


тут наверное штатными средствами SQL-драйверов Qt ни как. Наверно только через API СУБД только
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 21.12.2024, 20:18