| Название: QMutexLocker паттерн для QSqlDatabase::transaction() Отправлено: asvil от Января 14, 2011, 20:40 Маленький класс для автороллбэка либо коммита. Не используйте для ORACLE DDL. header Код: #ifndef AUTOTRANSACTION_H source Код: #include "autotransaction.h" Код: AutoTransaction transaction(ourDatabase); Название: Re: QMutexLocker паттерн для QSqlDatabase::transaction() Отправлено: White Owl от Января 14, 2011, 20:57 Простите, а чем не устраивает просто посылать commit/roolback? Код: QSqlDatabase::database().commit(); Код: qry.driver().transactionCommit(); Название: Re: QMutexLocker паттерн для QSqlDatabase::transaction() Отправлено: Пантер от Января 14, 2011, 21:07 Ну, так уж точно не забудешь перед return сделать роллбэк. Название: Re: QMutexLocker паттерн для QSqlDatabase::transaction() Отправлено: asvil от Января 15, 2011, 00:11 Ага, Пантер, верно подсказывает. Простите неправильно записал пример использования. Код: AutoTransaction transaction(ourDatabase); Название: Re: QMutexLocker паттерн для QSqlDatabase::transaction() Отправлено: White Owl от Января 15, 2011, 02:44 Хотя, оспорте, а то так неинтересно.А запросто :) Код: AutoTransaction transaction(ourDatabase); Название: Re: QMutexLocker паттерн для QSqlDatabase::transaction() Отправлено: MoPDoBoPoT от Января 15, 2011, 12:02 А ещё в Oracle есть такая особенность: после выполнения DDL оператора, происходит неявный коммит. Название: Re: QMutexLocker паттерн для QSqlDatabase::transaction() Отправлено: ритт от Января 15, 2011, 19:25 зачем оно виртуал? и зачем оно не инлайновое? Название: Re: QMutexLocker паттерн для QSqlDatabase::transaction() Отправлено: asvil от Января 17, 2011, 22:34 Константин, авторское java-style решение:) Павлик, спасибо уточнил сферу применения. White Owl, а как запрашивать существование транзакции? Название: Re: QMutexLocker паттерн для QSqlDatabase::transaction() Отправлено: White Owl от Января 18, 2011, 19:49 White Owl, а как запрашивать существование транзакции?а... select @@trancount ... для некоторых баз данных. К сожалению, универсально это узнать нельзя. Значит надо добавлять явный запрос на начало второй транзакции. И использовать как-то так: AutoTransaction transaction(ourDatabase); Код: QSqlQuery query(ourDatabase); |