![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Транзакция на стороне клиента [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]
Сказать по-правде, хоть это и не ответ на вопрос, но лучше уж тогда на сервере же транзакциями и рулить, а не пускать их с клиента...
А вообще, конечно, занятно...