Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.22;
Скачать: CL | DM;

Вниз

корректно ли я использую транзакции?   Найти похожие ветки 

 
MORA   (2004-07-28 18:29) [0]

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

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

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

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


 
Reindeer Moss Eater ©   (2004-07-28 18:33) [1]

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

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


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


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

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


 
Reindeer Moss Eater ©   (2004-07-28 18:38) [3]

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


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


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

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


 
Reindeer Moss Eater ©   (2004-07-28 18:43) [5]

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


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

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


 
Reindeer Moss Eater ©   (2004-07-28 18:49) [7]

Конечно.

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


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

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


 
Reindeer Moss Eater ©   (2004-07-28 18:54) [9]

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

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


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


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

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


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

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


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


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

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


 
Reindeer Moss Eater ©   (2004-07-28 19:03) [13]

А я знаю?

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

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


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


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


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

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


 
bushmen ©   (2004-07-28 20:11) [15]

>  tblOrders.Post;

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



Страницы: 1 вся ветка

Текущий архив: 2004.08.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.033 c
14-1091432661
}|{yk
2004-08-02 11:44
2004.08.22
Почитайте, интересно...


3-1089268594
Григорьев Антон
2004-07-08 10:36
2004.08.22
БД без СУБД


14-1091355954
dimon_programmer
2004-08-01 14:25
2004.08.22
Как достать темы для XP, подскажите!


14-1091479516
Lamers not dead
2004-08-03 00:45
2004.08.22
Где взять JRO_TLB?


14-1091791513
Юрий Зотов
2004-08-06 15:25
2004.08.22
Переустановка Red Hat "по месту" - это возможно?