Название: Как прервать запрос к БД Отправлено: trot от Январь 07, 2011, 00:00 Пользователь выполнет запросы к БД. Запросы он формирует сам. Как корректно прерывать длительные запросы.
Запросы выполняются через QSqlQuery::exec(QString). Название: Re: Как прервать запрос к БД Отправлено: asrael от Январь 07, 2011, 00:21 Может, использовать таймер? Если время больше заданного, то отключать пользователя от базы..
Название: Re: Как прервать запрос к БД Отправлено: NicK от Январь 07, 2011, 11:34 Пользователь выполнет запросы к БД. Запросы он формирует сам. Как корректно прерывать длительные запросы. Запросы выполняются через QSqlQuery::exec(QString). Присоединяюсь к вопросу. Возможно ли вообще по желанию пользователя прерывать длительные запросы к БД (например, по нажатию кнопки "Отмена"). Обязательно ли знать id запущенного SQL процесса для его прерывания? Будет ли запрос работать после отключения пользователя от базы или временного отключения от сети?(ведь запущенный запрос все-равно выполняется на сервере). Понимаю, что вопрос больше по SQL, чем по Qt, но все-таки, может кто подкинет пару идей или ткнет носом в нужную ссылку, например). Название: Re: Как прервать запрос к БД Отправлено: asrael от Январь 07, 2011, 12:11 Тогда, что за SQL вы используете?
Название: Re: Как прервать запрос к БД Отправлено: lit-uriy от Январь 07, 2011, 13:41 >>то отключать пользователя от базы..
а как это делать? Название: Re: Как прервать запрос к БД Отправлено: asrael от Январь 07, 2011, 14:16 >>то отключать пользователя от базы.. я как-то хотел сделать что-то подобное, ну, кнопку "отмена" для длительных операций. я юзал sqlite, тогда в документации нашел тему Interrupt A Long-Running Query (http://www.sqlite.org/c3ref/interrupt.html (http://www.sqlite.org/c3ref/interrupt.html)), но не смог раскурить, как это в QT реализовать и плюнул..а как это делать? пробовал просто создавать новое соединение с базой, закрывая тем самым старое, но программа ругалась и схлопывалась.. :D Название: Re: Как прервать запрос к БД Отправлено: White Owl от Январь 11, 2011, 00:25 Универсального решения нет.
У некоторых баз данных, в родном интерфейсе есть возможность отмены команды. По непонятной причине, QSqlDriver не имеет стаба для такой операции. В принципе, можно использовать связку: Код: QVariant v = db.driver()->handle(); |