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

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

Транзакция на стороне клиента [D6, D7, MSSQL]


Hooch ©   (2004-02-09 14:19:00) 

День добрый !
Как в хранимой процедуре можно узнать что транзакция стартована с клиента ? т.е. на клиенете пишем


adoConnection.BeginTrans;
if adoConnection.InTransaction then
try
adoConnection.Execute("test");
adoConnection.CommitTran;
except
adoConnection.RollbackTrans;
end;


процедура test


create procedure test as
begin
if @@TranCount = 0
raiserror("no tran", 16, 10)
end


в результате выполнения на клиенте получаем "no tran"


Sandman25   (2004-02-09 16:45:00) [1]

Есть ХП генерации документа. Есть 2 варианта использования данной ХП - либо она запускается независимо (и тогда транзакция должна быть начата и закончена самой ХП-ой), либо она запускается из другой ХП, которая кроме вызова первой ХП сама тоже работает с БД (документ из первой ХП становится частью группы документов). Во втором случае транзакция начинается и заканчивается из "внешней" ХП.
В качестве решения используется дополнительный параметр ХП, как предлагал и
[5] Nikolay M. © (09.02.04 15:52). В случае возникновения исключения ХП проверяет по параметру, следует ли откатывать транзакцию, или это сделает внешняя процедура.


VLAD-MAL   (2004-02-09 16:41:00) [2]

Ох-хо-хо.


Nikolay M.   (2004-02-09 16:31:00) [3]


> VLAD-MAL (09.02.04 15:55) [6]
> 2 Nikolay M. © (09.02.04 15:52) [5]
> С какого потолка взят этот бред? Или я понял не то, что
> тут имелось ввиду?
> Вы не согласны?


Нет, конечно.
BEGIN TRANSACTION
ROLLBACK TRANSACTION
COMMIT TRANSACTION
из T-SQL reference о чем-нибудь говорит?


VLAD-MAL   (2004-02-09 16:00:00) [4]

Ну, за удачу!


ZrenBy   (2004-02-09 15:58:00) [5]

Я не согласен с VLAD-MAL
Я согласен с Nikolay M.

А транзакции на сервере не запустишь.- это бред


VLAD-MAL   (2004-02-09 15:55:00) [6]

2 Nikolay M. © (09.02.04 15:52) [5]

С какого потолка взят этот бред? Или я понял не то, что тут имелось ввиду?



Вы не согласны?


Nikolay M.   (2004-02-09 15:52:00) [7]


> А транзакции на сервере не запустишь. Они ж транзакции,
> их родители - всегда коиенты.

С какого потолка взят этот бред? Или я понял не то, что тут имелось ввиду?

По сабжу: как вариант, можно сделать в процедуре дополнительный параметр-флажок, который будет указывать, запущена процедура с клиента или с сервера.
А вообще мне лично непонятен смысл сих манипуляций, не говоря уже о ненадежности варианта, когда транзакциями рулит клиент.


VLAD-MAL   (2004-02-09 15:07:00) [8]

Типа, э ...
Ответ:
Ну, раз мы уже в процедуре, то кто-то на клиенте транзакцию все-таки стартанул :)

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


KSergey   (2004-02-09 14:33:00) [9]

Значит забыть об нем как о страшном сне и не пользовать в дальнейшем ;) На неувязочку плюнуть - есть и другие задачи.
Хотя поразбираться и занятно ;)


Hooch   (2004-02-09 14:31:00) [10]


> но лучше уж тогда на сервере же транзакциями и рулить, а
> не пускать их с клиента


отсюда вопрос и пошел, начал переносить транзакции на сервер, и случайно напоролся на такой странный эффект


KSergey   (2004-02-09 14:22:00) [11]

Сказать по-правде, хоть это и не ответ на вопрос, но лучше уж тогда на сервере же транзакциями и рулить, а не пускать их с клиента...
А вообще, конечно, занятно...


Наверх

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