powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вложенные транзакции
13 сообщений из 13, страница 1 из 1
Вложенные транзакции
    #32192142
sergei_p
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как осуществить вложенные транзакции при использовании компонента TADOConnection при соединениии с SQL Server через OLE db провайдер&
При попытке начать вложенную транзакцию выдает сообщение:
Can not more transaction on this session.
...
Рейтинг: 0 / 0
Вложенные транзакции
    #32192292
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не надо использовать транзакции на клиенте, это есть очень плехо - пиши ХП и делай там чего хошь.
...
Рейтинг: 0 / 0
Вложенные транзакции
    #32192466
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2tygra: без демагогии - скажи почему оно не работает!
BCB6 + Ole DB for SQL Server + TADOConnection - не позволяет написать
con->BeginTrans()
con->BeginTrans()
!
...
Рейтинг: 0 / 0
Вложенные транзакции
    #32192509
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос снят. Если кому интересно то
INFO: Nested Transactions Not Available in ODBC/OLE DB/ADO
Очень жаль
...
Рейтинг: 0 / 0
Вложенные транзакции
    #32192521
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чеж жалкого, вот если уж очень надо с клиента http://support.microsoft.com/default.aspx?scid=kb;en-us;238163
...
Рейтинг: 0 / 0
Вложенные транзакции
    #32192547
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2pkarklin:
Отлично. То что так сделать оно и так было понятно - но с твоей ссылкой это еще и приобретает как бы статус официального workaround'а.
Хочу лишь добавить - что в большинстве случаев вообще достаточно делать что-то типа

if ( !connection->InTransaction )
connection->BeginTrans();



P.S. всегда приятно иметь с тобой дело :)
...
Рейтинг: 0 / 0
Вложенные транзакции
    #32192560
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2tygra:
насчет клиентских транзакций.
Задача: есть объект собирающий данные с клиента и в определенном виде посылающий их по почте, а затем помечающий их как обработанные - так вот клиентская транзакция нужна для упрощения контроля за тем что вся операция прошла успешно
...
Рейтинг: 0 / 0
Вложенные транзакции
    #32193184
Serge_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, дошли до объяснения зачем нужны транзакции.
А вот вложеных транзакций не существует в природе. Некоторые средства позволяют сделать открытие транзакции несколько раз, но это псевдовложенность. На самом деле ведется счетчик.
Вообще в СУБД нет явного открытия транзакции. Она открывается неявно при первом же обращении (SQL) и закрывается явно разработчиком.
Так вот каждое открытие транзакции ведет к увеличению счетчика, а закрытие к уменьшению. Когда счетчик становится 0 - транзакция закрывается, т.е. отменить можно все, с начала первого SQL`я.
Если явно не делать открытие (реч идет о разработке в Делфи), то транзакция закроется после каждого вызова ExecSQL.
...
Рейтинг: 0 / 0
Вложенные транзакции
    #32193282
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Serge_S

А вот вложеных транзакций не существует в природе.

Ну вот, приехали.

Вообще в СУБД нет явного открытия транзакции.

А BEGIN TRAN че тогда делает???

Она открывается неявно при первом же обращении (SQL) и закрывается явно разработчиком.

А это мил друг называется режимом неявных транзакций и для сиквела он включается с помошью SET IMPLICIT_TRANSACTIONS ON. Вот тогда явно писать BEGIN TRAN не надо. Именно так работает ADO. Поэтому и нельзя методами ADO сделать вложенность транзакций.

Если явно не делать открытие (реч идет о разработке в Делфи), то транзакция закроется после каждого вызова ExecSQL.

А вот это вот справедливо тока для режима явных транзакций, когда одна инструкция=одна транзакция. И причем тут Delphi?

Вообщем учиться, учиться и еще раз учиться!!!
...
Рейтинг: 0 / 0
Вложенные транзакции
    #32193865
Serge_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 pkarklin

А BEGIN TRAN че тогда делает???

Я объяснил, что делает (читай про счетчики). Фактически никаких действий в СУБД не происходит. Просто BEGIN TRAN говорит СУБД не закрывать транзакцию до COMMIT. Повторяю, транзакции открываются только неявно.

А это мил друг называется режимом неявных транзакций и для сиквела он включается с помошью SET IMPLICIT_TRANSACTIONS ON. Вот тогда явно писать BEGIN TRAN не надо.
Ты просто говоришь СУБД чтобы она не ожидала BEGIN TRAN и все. С этим параметром она работае в обычном режиме. А SET IMPLICIT_TRANSACTIONS OFF заставляет ее без BEGIN TRANS комитить после каждой комманды.

А вот это вот справедливо тока для режима явных транзакций, когда одна инструкция=одна транзакция. И причем тут Delphi?
Делфи тут не причем, это к оператору ExecSql.

Вообщем учиться, учиться и еще раз учиться!!!
...
Рейтинг: 0 / 0
Вложенные транзакции
    #32193923
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не понимаю, что ты имеешь ввидку под фактически . Вот ты говоришь, что вложенных транзакций не существует в природе и все они неявные. Ну если тока исходить из того, что в лог ничего фактически не пишеться, пока не пройдет инструкция на модификацию, да закомитить тока внутреннюю транзакцию нельзя. Ну то есть в трактовке смысла слова вложенные . Но так именно вложенность явных транзакций (в понятии их вложенности в сиквеле, а в отличии от природы, там такое понятие существет) позваляет писать хп с транзакциями, которые могут вызываться как из процесса уже имеющего открытую транзакцию, так и не имеющую таковой.
...
Рейтинг: 0 / 0
Вложенные транзакции
    #32194127
Serge_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 pkarklin
Ну то есть в трактовке смысла слова вложенные. Но так именно вложенность явных транзакций (в понятии их вложенности в сиквеле, а в отличии от природы, там такое понятие существет) позваляет писать хп с транзакциями, которые могут вызываться как из процесса уже имеющего открытую транзакцию, так и не имеющую таковой

В рамках одного конекта может быть только одна транзакция, которая распространяется на все statment`ы (Query) в этом конекте.
Делая BEGIN TRAN ты говоришь СУБД, что с этого момента открытую (неявно!) транзакцию не закрывать до твоей комманды. Если во время транзакции открываешь еще одну (с помощью BEGIN TRAN в SQL или в ХП), СУБД лишь подсчитывает кол-во новоотрытых. COMMIT - наоборот уменьшает счетчик и закроется транзакция, только когда придет последний COMMIT, соответствующий BEGIN. Т.е.
(1)BEGIN <- ничего не происходит (внешний)
(2)BEGIN <- ничего не происходит (внешний)
(3)BEGIN <- ничего не происходит (ХП)
(2)COMMIT <- ничего не происходит (ХП)
(1)COMMIT <- ничего не происходит (внешний)
(0)COMMIT <- закроет транзакцию (внешний)

В примере: если не будет внешних вызовов BEGIN и COMMIT, то отработают BEGIN и COMMIT в ХП.
...
Рейтинг: 0 / 0
Вложенные транзакции
    #32194210
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да физику процесса мы с тобой одинаково понимаем. Ну а вот в трактовке термина вложенность каждый пусть останеться при своем мнении. :-)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вложенные транзакции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]