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

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

корректно ли я использую транзакции? [D7]


MORA ©   (2004-07-28 18:29:00) 

Мне надо при сохранении ЗАКАЗА сохранить все, что ЗАКАЗАНО. Использую транзакцию:

db.StartTransaction;
try
 tblOrders.Post;
 db.Commit;
except
 db.Rollback;
end;

а в обработчике tblOrders.BeforePost пишу так:

try
 // в цикле пытаюсь запостить все что ЗАКАЗАНО
except
 // а если не получилось, выкидываю Exception дальше
 raise; // или Abort;
end;  


bushmen   (2004-07-28 20:11:00) [1]

>  tblOrders.Post;

перед тем, как сделать Post, еще бы сделать Append надо. И боюсь, что в таком контексте это работать не будет.


MORA   (2004-07-28 19:09:00) [2]


>
> Reindeer Moss Eater ©   (28.07.04 19:03)


ясно. цикл по записям другой таблицы.

кстати, при неудаче надо делать Cancel или Rollback это сам делает?


Reindeer Moss Eater   (2004-07-28 19:03:00) [3]

А я знаю?

Код я не привел, но цикл есть

А я знаю, какой там цикл? По записям ли он, или просто по полям одной записи.


MORA   (2004-07-28 19:02:00) [4]


> Вот поэтому в посте номер один я и спросил "зачем", а не
> сказал, что "незачем".

дык таки надо?
[1]?


Reindeer Moss Eater   (2004-07-28 19:00:00) [5]

Вот поэтому в посте номер один я и спросил "зачем", а не сказал, что "незачем".


MORA   (2004-07-28 18:59:00) [6]


> А где в твоем коде видно, что в транзакции обрабатываются
> N записей, а не одна?

в обработчике BeforePost - цикл. (см. [1])
Код я не привел, но цикл есть


Reindeer Moss Eater   (2004-07-28 18:54:00) [7]

А где в твоем коде видно, что в транзакции обрабатываются N записей, а не одна?

Ты спрашиваешь про корректно ли я использую транзакции.
А я отвечаю. Глядя на код.


MORA   (2004-07-28 18:52:00) [8]

ну а если записей много: первые 10000 записались, а 10001-ая не захотела. Первые 10000 откатятся? (Извините, если вопрос дублируется :))


Reindeer Moss Eater   (2004-07-28 18:49:00) [9]

Конечно.

Только транзакция все равно будет.


MORA   (2004-07-28 18:44:00) [10]

хотите сказать, что если BeforePost выкинет Exception, то и вызывающий его Post не выполнится? Без транзакции?


Reindeer Moss Eater   (2004-07-28 18:43:00) [11]

Перевожу.
Если из твоего кода убрать строки связанные с транзакцией, то транзакция все равно будет.
Точно такая же как описана в коде твоем.
Перевел?


MORA   (2004-07-28 18:40:00) [12]


> Транзакция эта же самая стартанет точно также.

переведи....


Reindeer Moss Eater   (2004-07-28 18:38:00) [13]

Транзакция эта же самая стартанет точно также.
Даже если убрать вызов её из кода.


MORA   (2004-07-28 18:37:00) [14]


> Reindeer Moss Eater ©   (28.07.04 18:33) [1]
> Если :

даже если одна: например, удачно записалось ЗАКАЗАНО, которое ссылается на ЗАКАЗ, а сам ЗАКАЗ не запостился. ЗАКАЗАНО - повисло как сирота, никому не принадлежащая


Reindeer Moss Eater   (2004-07-28 18:33:00) [15]

Если :
одна таблица
одна запись

То зачем явная транзакция?
Она и так будет без твоих усилий.


Наверх

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