zloy_d
Гость
|
|
« : Октябрь 26, 2009, 10:23 » |
|
Дано: 1. Открываю соединение с БД, создаю запрос. 2. В треде этот запрос исполняется, причем довольно долго ("INSERT INTO...", время исполнения около получаса). 3. Имеется диалог с кнопочкой "Отмена", который индицирует ход запроса и выводит ошибки и т.д.
БД - Oracle 9, если это важно.
Задача: по нажатию "Отмена" корректно прибить запрос, который находится в стадии исполнения (работает exec()).
Пробовал прибивать тред и через указатель на QSqlQuery очищать его, а также закрывать соединение. Но это не работает, сессия Oracle все равно висит и находится в статусе active, т.е. запрос продолжает работать. Все действия над этим соединением (QSqlDatabase) приводят к подвисанию основного треда. Я конечно могу открывать второй, третий и т.д. экземпляры соединения и далее работать с ними, но это не катит, т.к. плодятся сессии и к тому же лочатся таблицы, которые я задействовал в том запросе (т.е. работать с ними я все равно не могу).
Есть идеи как убить запрос? Желательно средствами Qt...
|