Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];

Вниз

Транзакзии на IB   Найти похожие ветки 

 
Anton   (2004-02-07 13:12) [0]

С транзакциями раньше работал на MSSQL....
например, такой код:

BEGIN TRAN t1
INSERT INTO ......
IF @@ERROR<>0 GOTO error
UPDATE .....
IF @@ERROR<>0 GOTO error
INSERT INTO .....
IF @@ERROR<>0 GOTO error
COMMIT TRAN t1
RETURN

error:
ROLLBACK TRAN t1

т.е. если все INSERT-ы UPDATE-ы выполнились - все ОК.
если при выполнении одного из них возникла ошибка - отменяем все INSERT-ы с UPDATE-ми, т.е. откатываем транзакцию.

Вопрос - как подобное изобразить на IB в ХП


 
Sergey_Masloff   (2004-02-07 13:17) [1]

В IB нельзя управлять транзакциями на сервере. Только с клиента.
Просто в случае ошибки делай rollback с клиента.


 
Romkin   (2004-02-07 13:22) [2]

Точно как написано - никак :)
Во-первых, транзакциями управляет только клиент, сервер может только откатить транзакцию, если клиент отвалился.
Во-вторых, при возникновении (или возбуждении) exception в хп оно передается на клиента, а там, как правило, стоит блок
ibtrans.StartTransaction
try
... //работаем
ibTrans.Commit;
except
ibTrans.Rollback;
raise;
end;
Процедура выполняется всегда в одной транзакции, при ошибке происходит откат всех действий, прошедших с последнего SUSPEND (если его нет - откатываются все действия ХП), и ошибка передается на клиента. Он, правда, может и не откатывать транзакцию :)
То есть в твоем случае ты смело можешь писать в одной процедуре блок insert, update и тд. Если будет ошибка - все действия блока откатятся автоматически.


 
Anton   (2004-02-07 13:24) [3]

Блин, так и знал..
Но все же надеялся, что это я не знаю как сделать, а IB умеет ...


 
Romkin   (2004-02-07 13:31) [4]

Если тебе надо
"если все INSERT-ы UPDATE-ы выполнились - все ОК.
если при выполнении одного из них возникла ошибка - отменяем все INSERT-ы с UPDATE-ми"
То, как я сказал, пиши в одной процедуре всех их подряд, получишь то, что хочешь


 
Digitman   (2004-02-07 13:36) [5]


> Anton (07.02.04 13:24) [3]


кое-чем, вероятно, тебе здесь может помочь механизм savepoint"ов (частичный откат тек.транзакции к точкам сохранения, устанавливаемым тобой явно в теле SP/триггера), если откажешься от IB в пользу FB


 
Anton   (2004-02-07 13:36) [6]

м-да....
а вот, в случае разрыва связи клиента с сервером - точно ли транзакция откатится?


 
Digitman   (2004-02-07 13:47) [7]


> Anton (07.02.04 13:36) [6]


обязана откатиться
подтверждения же транзакции нет


 
Anton   (2004-02-07 13:52) [8]

"То, как я сказал, пиши в одной процедуре всех их подряд, получишь то, что хочешь" - да, конечно, так и сделаю, спасибо.
Так и хотел делать, но все же надеялся, что IB умеет сам работать с транзакциями без клиента. Согласись, обработка транзакций на сервере целиком - значительно надежней. Многие MSSQL матерят, хотя он имеет не мало преимуществ ..., хотя бы вот это(обходиться с транзакциями самостоятельно).


 
KA_   (2004-02-07 14:39) [9]

>Sergey_Masloff (07.02.04 13:17) [1]
>В IB нельзя управлять транзакциями на сервере
>Romkin © (07.02.04 13:22) [2]
>Точно как написано - никак :)

А как же SET TRANSACTION, COMMIT, ROLLBACK. Они ведь доступны и в DSQL и в embedded SQL?


 
Digitman   (2004-02-07 14:53) [10]

DSQL и EmbSQL имеют отношение только к кл.стороне
серверная сторона - это PSQL, где там никаких языковых конструкций управления транзакциями



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

Форум: "Базы";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
14-12481
Knight
2004-02-13 22:12
2004.03.05
Дружит ли Delphi5 и 7 ?


4-12576
frost
2003-12-28 20:17
2004.03.05
Как из FD : TWin32FindData - получить дату в формате TDateTime


6-12473
RNZ
2003-12-30 12:36
2004.03.05
NAT и IP-телефония


1-12396
}|{yk
2004-02-24 18:14
2004.03.05
Продолжение изучения написания компонентов Delphi


1-12390
TUser
2004-02-24 18:48
2004.03.05
Что там 2200 потоков ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский