Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вложенные транзакции
|
|||
|---|---|---|---|
|
#18+
Как осуществить вложенные транзакции при использовании компонента TADOConnection при соединениии с SQL Server через OLE db провайдер& При попытке начать вложенную транзакцию выдает сообщение: Can not more transaction on this session. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 12:00 |
|
||
|
Вложенные транзакции
|
|||
|---|---|---|---|
|
#18+
А не надо использовать транзакции на клиенте, это есть очень плехо - пиши ХП и делай там чего хошь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 13:01 |
|
||
|
Вложенные транзакции
|
|||
|---|---|---|---|
|
#18+
2tygra: без демагогии - скажи почему оно не работает! BCB6 + Ole DB for SQL Server + TADOConnection - не позволяет написать con->BeginTrans() con->BeginTrans() ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 14:21 |
|
||
|
Вложенные транзакции
|
|||
|---|---|---|---|
|
#18+
Вопрос снят. Если кому интересно то INFO: Nested Transactions Not Available in ODBC/OLE DB/ADO Очень жаль ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 14:37 |
|
||
|
Вложенные транзакции
|
|||
|---|---|---|---|
|
#18+
Чеж жалкого, вот если уж очень надо с клиента http://support.microsoft.com/default.aspx?scid=kb;en-us;238163 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 14:42 |
|
||
|
Вложенные транзакции
|
|||
|---|---|---|---|
|
#18+
2pkarklin: Отлично. То что так сделать оно и так было понятно - но с твоей ссылкой это еще и приобретает как бы статус официального workaround'а. Хочу лишь добавить - что в большинстве случаев вообще достаточно делать что-то типа if ( !connection->InTransaction ) connection->BeginTrans(); P.S. всегда приятно иметь с тобой дело :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 14:50 |
|
||
|
Вложенные транзакции
|
|||
|---|---|---|---|
|
#18+
2tygra: насчет клиентских транзакций. Задача: есть объект собирающий данные с клиента и в определенном виде посылающий их по почте, а затем помечающий их как обработанные - так вот клиентская транзакция нужна для упрощения контроля за тем что вся операция прошла успешно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2003, 14:54 |
|
||
|
Вложенные транзакции
|
|||
|---|---|---|---|
|
#18+
Ну вот, дошли до объяснения зачем нужны транзакции. А вот вложеных транзакций не существует в природе. Некоторые средства позволяют сделать открытие транзакции несколько раз, но это псевдовложенность. На самом деле ведется счетчик. Вообще в СУБД нет явного открытия транзакции. Она открывается неявно при первом же обращении (SQL) и закрывается явно разработчиком. Так вот каждое открытие транзакции ведет к увеличению счетчика, а закрытие к уменьшению. Когда счетчик становится 0 - транзакция закрывается, т.е. отменить можно все, с начала первого SQL`я. Если явно не делать открытие (реч идет о разработке в Делфи), то транзакция закроется после каждого вызова ExecSQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2003, 00:02 |
|
||
|
Вложенные транзакции
|
|||
|---|---|---|---|
|
#18+
2 Serge_S А вот вложеных транзакций не существует в природе. Ну вот, приехали. Вообще в СУБД нет явного открытия транзакции. А BEGIN TRAN че тогда делает??? Она открывается неявно при первом же обращении (SQL) и закрывается явно разработчиком. А это мил друг называется режимом неявных транзакций и для сиквела он включается с помошью SET IMPLICIT_TRANSACTIONS ON. Вот тогда явно писать BEGIN TRAN не надо. Именно так работает ADO. Поэтому и нельзя методами ADO сделать вложенность транзакций. Если явно не делать открытие (реч идет о разработке в Делфи), то транзакция закроется после каждого вызова ExecSQL. А вот это вот справедливо тока для режима явных транзакций, когда одна инструкция=одна транзакция. И причем тут Delphi? Вообщем учиться, учиться и еще раз учиться!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2003, 08:24 |
|
||
|
Вложенные транзакции
|
|||
|---|---|---|---|
|
#18+
2 pkarklin А BEGIN TRAN че тогда делает??? Я объяснил, что делает (читай про счетчики). Фактически никаких действий в СУБД не происходит. Просто BEGIN TRAN говорит СУБД не закрывать транзакцию до COMMIT. Повторяю, транзакции открываются только неявно. А это мил друг называется режимом неявных транзакций и для сиквела он включается с помошью SET IMPLICIT_TRANSACTIONS ON. Вот тогда явно писать BEGIN TRAN не надо. Ты просто говоришь СУБД чтобы она не ожидала BEGIN TRAN и все. С этим параметром она работае в обычном режиме. А SET IMPLICIT_TRANSACTIONS OFF заставляет ее без BEGIN TRANS комитить после каждой комманды. А вот это вот справедливо тока для режима явных транзакций, когда одна инструкция=одна транзакция. И причем тут Delphi? Делфи тут не причем, это к оператору ExecSql. Вообщем учиться, учиться и еще раз учиться!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2003, 15:31 |
|
||
|
Вложенные транзакции
|
|||
|---|---|---|---|
|
#18+
Я не понимаю, что ты имеешь ввидку под фактически . Вот ты говоришь, что вложенных транзакций не существует в природе и все они неявные. Ну если тока исходить из того, что в лог ничего фактически не пишеться, пока не пройдет инструкция на модификацию, да закомитить тока внутреннюю транзакцию нельзя. Ну то есть в трактовке смысла слова вложенные . Но так именно вложенность явных транзакций (в понятии их вложенности в сиквеле, а в отличии от природы, там такое понятие существет) позваляет писать хп с транзакциями, которые могут вызываться как из процесса уже имеющего открытую транзакцию, так и не имеющую таковой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2003, 16:19 |
|
||
|
Вложенные транзакции
|
|||
|---|---|---|---|
|
#18+
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 в ХП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2003, 21:03 |
|
||
|
|

start [/forum/topic.php?fid=58&gotonew=1&tid=2117854]: |
0ms |
get settings: |
11ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
100ms |
get topic data: |
12ms |
get first new msg: |
8ms |
get forum data: |
4ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 263ms |
| total: | 495ms |

| 0 / 0 |
