Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [AnyDAC] как организовать транзакции? 
:(
    Опции темы
CompWorm
  Дата 20.3.2010, 04:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



Доброго времени суток!
Вопрос у меня, как всегда, нубско-теоретический smile 

Для работы с MSSQL я юзаю AnyDAC компоненты 
вопрос состоит в том, как правильнее/логичнее/грамотнее слинковать TADConnection, TADQuery и TADTransaction. 
например, если мы (без транзакций) связываем Connection с Query, то сделать это можно одним единственным способом:

1.0
Код

  ADQuery1.Connection       := ADConnection1;

тут всё просто и понятно. 

Однако Transaction можно подключить к Connection и так и сяк:
1.1
Код

  // 1.1.1
  ADConnection1.Transaction := ADTransaction1;
  // 1.1.2
  ADTransaction1.Connection := ADConnection1;


далее отмечу, что можно слинковать все три компонента разными способами:
2.1
Код

  ADConnection1.Transaction := ADTransaction1;
  ADQuery1.Connection       := ADConnection1;


2.2 
Код

  ADConnection1.Transaction := ADTransaction1;
  ADQuery1.Transaction      := ADTransaction1;


2.х
и так далее, все комбинации из
Код

  ADConnection1.Transaction := nil;
  ADQuery1.Connection         := nil;
  ADQuery1.Transaction         := nil;
  ADTransaction1.Connection := nil;


обращаю Ваше внимание на то, что соединения, типа 
Код

  ADQuery1.Connection:=ADConnection1;
  ADQuery1.Transaction:=ADTransaction1;

работать не будет, как и те, что написаны выше, что не совсем очевидно очевидно! 
для работы системы требуется, чтоб параметр Connection у нашего Transaction был не пустым!
то есть работают только комбинации, где присутствует строчка
Код

ADTransaction1.Connection := ADConnection1; 

а вот
Код

ADConnection1.Transaction := ADTransaction1;

с виду ни на что не влияет  smile 

вопрос: 
есть ли какой-то (не эстетический  smile ) смысл в разных вариантах связи этих объектов?
и если нет, то какой вариант классический?



Это сообщение отредактировал(а) CompWorm - 20.3.2010, 05:03


--------------------
PM MAIL   Вверх
CompWorm
Дата 22.3.2010, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



хорошо, ставлю вопрос по-другому. а с другими компонентами вы как управляетесь в плане транзакций?


--------------------
PM MAIL   Вверх
ZVano
Дата 15.4.2011, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 11.12.2006
Где: Украина, Кривой Р ог

Репутация: 1
Всего: 4



Если тут проходит аналогия с IBX-транзакцией, то так:

Окружение:
ADConnection1 - центральный коннекшен
ADTransaction1 - транзакция по-умолчанию для ADConnection1

ADQuery1, ADQuery2 ... ADQueryN - рабочие запросы к БД.
ADTransaction2 - рабочая транзакция

Связи (обычная схема работы):
Код

ADConnection1.Transaction := ADTransaction1;
ADTransaction2.Connection := ADConnection1;

ADQuery1.Connection:=ADConnection1;
ADQuery1.Transaction := ADTransaction2;

ADQuery2.Connection:=ADConnection1;
ADQuery2.Transaction := ADTransaction2;
// ... 
ADQueryN.Connection:=ADConnection1;
ADQueryN.Transaction := ADTransaction2;


Отработали с ADQuery1, ADQuery2 ... ADQueryN делаем либо ADTransaction2.Commit, либо ADTransaction2.Rollback
В ADTransaction1 будут сидеть транзакции компонент(ADQueryX, ADTableX ...), не привязаных к определенной транзакции.
Т.е. ADTransaction1 - транзакция по умолчанию.



Кроме обычной схемы есть еще объединенная.
Это когда используется одна транзакция для нескольких подключений к разным БД.
Используется для того, чтобы выполнить одновременный гарантированый Commit|Rollback к разным БД.

Добавлено 20110418:
Проверил. Аналогия с компонентами IBX тут не проходит.
Все изменения идут мимо транзакции, которая указана в компоненнтах ADQueryN.

Это сообщение отредактировал(а) ZVano - 18.4.2011, 16:36


--------------------
НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению.
Гуглим "Как правильно задавать вопросы"
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.4898 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.