Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TIBTransaction и MIDAS


Desperado ©   (2004-08-25 08:26:00) 

В хелпе про TIBTransaction есть такой интересный NOTE:

"In Midas applications, every query must be in its own transaction.  You must use one transaction component for each query component."

Кто-нибудь знает, почему надо к каждому query прикреплять собственную транзакцию? Чем это вызвано?


Desdechado   (2004-08-26 10:48:00) [1]

Ну, одна или не одна, это от логики зависит, а не от количества датасетов.
Транзакция - это набор изменений, который должен выполниться целиком или не выполниться вовсе.


Desperado   (2004-08-25 16:07:00) [2]

Я уже так и буду делать.
Все изменения хранить в кеше, а потом одной секундной транзакцией
все залью в БД.
Правда кода перелопачивать уйму придется :(
Кстати, транзакция будет не одна. Несколько, но одновременно.
Т.к. Датасетов несколько.


Romkin   (2004-08-25 14:30:00) [3]

Ерунда: Смотри сам, там на сервере приложений открываются таблицы и висят. Транзакций нет. А когда все сделал - тогда все и идет в БД, в одной транзакции.


Desperado   (2004-08-25 14:28:00) [4]

Спасибо за совет.
Статья помогла.
Таких коротких транзакций, к сожалению не получится...
Логика приложения такая :)


Romkin   (2004-08-25 11:09:00) [5]

В общем случае, сервер приложений предназначен для общения с OLTP системами: ни одна из них не любит длительных транзакций. Поэтому стремиться надо к следующей схеме: открыли транзакцию, взяли или изменили быстро данные, и закрыли ее. Провайдер старается делать именно так.
Поэтому ставь на главную форму сервера TIBSQLMonitor и отслеживай транзакции и запросы. Во-первых, многое станет понятно, во-вторых, когда видишь открытие транзакции, проход данных и сразу hard commit - все в порядке, транзакция подтверждена.
Другой вопрос в том, что у Interbase 6.5 и выше и у Firebird транзакция read read_committed не нагружает сервер, и может быть открыта сколько угодно долго. В этом случае можно ставить у cds PacketRecords положительным, в остальных случаях я бы не рекомендовал, провайдер держит транзакцию до окончания фетча ;)


Romkin   (2004-08-25 10:56:00) [6]

Так ты МИДАС строишь?
http://rsdn.ru/article/db/midas.xml
Посмотри, как там сделано. Статья написана на D5, в IBX D6 у транзакции появилось свойство AutoStopAction, его обычно в saCommit надо ставить, все будет работать. И еще посмотреть примечание насчет TIBSQL ;)
Учитывать надо только одно: провайдер при общении с сервером открывает транзакцию, если она была закрыта. И если он ее открыл - то по окончании закрывает. Если открывал не он - она останется открытой :)


Desperado   (2004-08-25 10:44:00) [7]

Потому что мне намного удобнее использовать один компонент транзакции с несколькими query. Это существенно упрощает разработку. Но этот note в хэлпе меня немного пугает.


Romkin   (2004-08-25 10:39:00) [8]

Почему тебя это так волнует? :)
TIBTransaction предназначена именно для того, чтобы каждый блок работал в своей транзакции, практически это и написано.


Desperado   (2004-08-25 10:18:00) [9]

Есть еще варианты истолкования данного хелпа?


Romkin   (2004-08-25 10:14:00) [10]

По моему мнению, немного не точно: скорее, у каждого провайдера должна быть своя транзакция. И все TIBQuery этого провайдера цепляются к ней, а их модет ведь быть не одна, когда делается связка мастер-деталь.
Дело в том, что TDatasetProvider пытается сам управлять своими транзакциями.


Desperado   (2004-08-25 09:53:00) [11]

>пардон, спутал с прямым углом))
чего????
т.е. то что ты сказал не верно?


stud   (2004-08-25 09:26:00) [12]

пардон, спутал с прямым углом))


stud   (2004-08-25 09:16:00) [13]

не обязательно. главное чтобы компонент был привязан хотябы к одной транзакции. можно иметь один компонент транзакции для всех компонентов


Наверх

Титульная страница Поиск, карта сайта Написать письмо