![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите разобраться с транзакциями в IB [D6, IB6.x]
GRR © (2003-04-10 10:12:00)Есть классическая (наверное) задача. Нужно сделать примерно следующее:
"Старт транзакции"
Try
while ... do
begin
модификация таблицы 1;
модификация таблицы 2;
end;
Except
"Откат транзакции"
Exit
End
"Подтверждение транзакции"
Т.е. транзакцию подтверждаем в случае успешного выполнения целого цикла модификаций (например расход N позиций товаров в одной таблице и одновременный приход их в другой) , т.е. подтверждаем "или все или ничего".
В чем вопрос.
IBTrancaction, оказывается, стартует автоматически с открытием таблиц. Поэтому когда пишешь StartTransaction Delphi ругается. В книге вычитал как правильно делать. Суть - выглядит так:
Try
while ... do
begin
модификация таблицы 1;
модификация таблицы 2;
end;
Except
"Откат транзакции"
Exit
End
"Подтверждение транзакции"
"Старт Транзакции"
Что меня беспокоит. У меня в проге еще 2 десятка таблиц, с открытием хотя бы одной из них естественно стартует транзакция, и если я сделаю как пишут в книгах я не уверен какое количество изменений я отменю через RollBack, потому как не знаю точно где произошло StartTransaction. К тому же в программе используется и простая модификация таблиц прямо через DBGrid-ы. Не получится ли что я и их прихвачу делая откат транзакции.
Короче изложить не получилось, извините.
GRR (2003-04-10 12:38:00) [1]
> Johnmen © (10.04.03 11:09)
> Всегда делать только явный старт тр-ий !
> Чтобы самому контролировать и управлять процессом...
Да ... наверное
Всем спасибо.
Johnmen (2003-04-10 11:09:00) [2]Всегдаделать только явный старт тр-ий !
Чтобы самому контролировать и управлять процессом...
Romkin (2003-04-10 10:58:00) [3]TIBTransaction модет быть произвольное количество, вот и распределяй, и открывай, когда надо, в чем проблема?
GRR (2003-04-10 10:52:00) [4]
> Johnmen © (10.04.03 10:16)
1. согласен, техническая ошибка
2. в этом-то и проблема, как обеспечить чтобы при откате не "зацепило" ненужные модифакации, произведенные после нгеявного старта транзакции.
Соловьев (2003-04-10 10:36:00) [5]
Transaction.InTransaction
Johnmen (2003-04-10 10:16:00) [6]Во-первых :
"Старт транзакции"
Try
while ... do
begin
модификация таблицы 1;
модификация таблицы 2;
end;
"Подтверждение транзакции"
Except
"Откат транзакции"
End
Во-вторых, если выдается сообщение, что тр. уже активна, значит она была стартована неявно при выполнении любогозапроса.