![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно управлять явной транзакцией? [D5, IB5.x]
Ruslan_ © (2003-03-08 20:13:00)Как правильно управлять явной транзакцией, используя компоненты INTERBASE?
Я делаю так:
Data.IBQuery1.Transaction.StartTransaction;
try
……………………
……………………
……………………
Data.IBTransaction.Commit;
except
Data.IBTransaction.Rollback;
end;
при попытке внести изменение выходит сообщение: Transaction is active.
Я так понял что транзакция включается сразу после запуска программы и при попытке открыть транзакцию, пишет что транзакция уже открыта…
Объясните пожалуйста как правильно организовать явную транзакцию используя компоненты:
IBDatabase
IBTransaction
IBQuery
Заранее спасибо!
Johnmen (2003-03-11 11:06:00) [1]Есть ! Этот механизм - явный старт...
stranger71 (2003-03-11 10:57:00) [2]Pat © (09.03.03 01:41)
>if IBTransaction1.InTransaction then IBTransaction1.Commit;
>IBTransaction1.StartTransaction;
Я сталкивался с такой проблемой, и это решение не помогло... Есть ли механизмы, ЗАПРЕЩАЮЩИЕ неявный старт транзакции?
Sergey Masloff (2003-03-09 09:10:00) [3]Pat © (09.03.03 01:41)
>if IBTransaction1.InTransaction then IBTransaction1.Commit;
>IBTransaction1.StartTransaction;
ИМХО лучше так:
var
OwnTrn : Boolean;
OwnTrn := True;
if IBTransaction1.InTransaction then
OwnTrn := False
else
IBTransaction1.StartTransaction;
try
DoSomething...
if OwnTrn then
IBTransaction1.Commit();
except
IBTransaction1.Rollback();
Raise;
end;
Pat (2003-03-09 01:41:00) [4]if IBTransaction1.InTransaction then IBTransaction1.Commit;
IBTransaction1.StartTransaction;
Где-то примерно так...
Johnmen (2003-03-08 22:51:00) [5]Перед выполнением любого (!) запроса неявно стартует транзакция. Чтобы этого избежать, стартуй транзакцию явно.
В твоем случае на момент явного старта уже был выполнен какой-либо запрос, а значит и стартована тр-ия...