| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > [AnyDAC] как организовать транзакции? |
| Автор: CompWorm 20.3.2010, 04:21 | ||||||||||||||||
| Доброго времени суток! Вопрос у меня, как всегда, нубско-теоретический Для работы с MSSQL я юзаю http://www.remobjects.com/anydac.aspx вопрос состоит в том, как правильнее/логичнее/грамотнее слинковать TADConnection, TADQuery и TADTransaction. например, если мы (без транзакций) связываем Connection с Query, то сделать это можно одним единственным способом: 1.0
тут всё просто и понятно. Однако Transaction можно подключить к Connection и так и сяк: 1.1
далее отмечу, что можно слинковать все три компонента разными способами: 2.1
2.2
2.х и так далее, все комбинации из
обращаю Ваше внимание на то, что соединения, типа
работать не будет, как и те, что написаны выше, что не совсем очевидно очевидно! для работы системы требуется, чтоб параметр Connection у нашего Transaction был не пустым! то есть работают только комбинации, где присутствует строчка
а вот
с виду ни на что не влияет вопрос: есть ли какой-то (не эстетический и если нет, то какой вариант классический? |
| Автор: CompWorm 22.3.2010, 20:25 |
| хорошо, ставлю вопрос по-другому. а с другими компонентами вы как управляетесь в плане транзакций? |
| Автор: ZVano 15.4.2011, 17:58 | ||
| Если тут проходит аналогия с IBX-транзакцией, то так: Окружение: ADConnection1 - центральный коннекшен ADTransaction1 - транзакция по-умолчанию для ADConnection1 ADQuery1, ADQuery2 ... ADQueryN - рабочие запросы к БД. ADTransaction2 - рабочая транзакция Связи (обычная схема работы):
Отработали с ADQuery1, ADQuery2 ... ADQueryN делаем либо ADTransaction2.Commit, либо ADTransaction2.Rollback В ADTransaction1 будут сидеть транзакции компонент(ADQueryX, ADTableX ...), не привязаных к определенной транзакции. Т.е. ADTransaction1 - транзакция по умолчанию. Кроме обычной схемы есть еще объединенная. Это когда используется одна транзакция для нескольких подключений к разным БД. Используется для того, чтобы выполнить одновременный гарантированый Commit|Rollback к разным БД. Добавлено 20110418: Проверил. Аналогия с компонентами IBX тут не проходит. Все изменения идут мимо транзакции, которая указана в компоненнтах ADQueryN. |