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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Oracle и QSqlQuery: как корректно убить запрос?  (Прочитано 3850 раз)
zloy_d
Гость
« : Октябрь 26, 2009, 10:23 »

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

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

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

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

Есть идеи как убить запрос?  Желательно средствами Qt...
Записан
NicK
Гость
« Ответ #1 : Октябрь 26, 2009, 10:58 »

Встал такой же вопрос, но по MySQL.
Пока нашел вот что:
http://dev.mysql.com/doc/refman/5.0/en/kill.html
http://www.sql.ru/forum/actualthread.aspx?tid=702037

Но, как получить ID уже запущенного процесса в SQL понять не могу.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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