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

Вниз

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

 
Наташа ©   (2003-03-22 08:42) [0]

Уважаемые Мастера Delphi! Помогите пожалуйста советом. Начинаю транзакцию и
выполняю вызовы ХР. Сначала ХП вставки общих данных о заказе List_Order,
затем ХП вставки данных о самом заказе orders
затем Commit или Rollback. В случае ошибки параметрах для ХП Вставки в сам заказ orders
выдает сообщение об откате, но при этом информация в List_order вставляется.
IBTransaction.StartTransaction;
Try
вызов ХП вставки в List_Order;
вызов Хп вставки в Orders;
IBTransaction.Commit; ShowMessage("Выполнено")
Except
IBTransaction.Rollback;
ShowMessage("откат");
End;
В чем может быть дело? Заранее благодарна.


 
zacho ©   (2003-03-22 09:04) [1]

В какой-то из версий IB был баг, при котором если в ХП был INSERT и EXCEPTION, INSERT не откатывался. Возможно у тебя именно этот случай. Попробуй перейти на более старшую версию IB, а еще лучше - FB.
P.S. Описание бага было, кажется, где-то на www.ibase.ru


 
Наташа ©   (2003-03-22 09:08) [2]

А что такое "баг"?


 
zacho ©   (2003-03-22 09:14) [3]


> Наташа © (22.03.03 09:08)

:-)
"баг" (англ. bug) - ошибка в коде. В данном случае - ошибка в коде IB


 
Наташа ©   (2003-03-22 09:24) [4]

Большое спасибо и за совет и за разъяснения!


 
Olivka ©   (2003-03-22 13:56) [5]

У меня недавно была та же проблема. Хотя я использую FIBplus для доступа к ИБ, но все решалось тем, что транзакция откатывалась правильно, а действия не отменялись, потому что это оказывались разные транзакции. Выход был в том, чтобы выполнять вызовы Select (хп и другие операторы) с помощью компонента Query, а не других компонент. Тогда все действия были в контексте именно этой начатой транзакции. Если объясняю непонятно - спрашивайте. Вы не указали как вы вызываете свои хп.


 
Наташа ©   (2003-03-22 14:10) [6]

Вызов происходит следующим образом
IBTransaction.StartTransaction;
Try
With SPInsert_LO do
begin
ParamByName("iDate").AsDate:=Date;
ParamByName("iManager").AsString:=fLogin.edPassword.Text;
ParamByName("iC_id").AsInteger:=CodCl;
и .т.д. другие параметры
ExecProc;
NumberOrder:=ParamByName("rLO_id").AsInteger;
end;
With SPInsertOrder do
begin
ParamByName("iLO_Id"):=NumberOrder;
ParamByName("iPr_Id").AsInteger:=Table["Pr_Id"];
ParamByName("iCount").AsInteger:=Table["Counts"];
и.т.д. другие параметрыж
ExecProc;
end;
IBTransaction.Commit; ShowMessage("Выполнено")
Except
IBTransaction.Rollback;
ShowMessage("откат");
End;
Тексты ХП , если требуется
SPInsert_LO
rLO_Id:=gen_Id(LO_Id_Gen,1);
Insert Into List_Order(Date, Manager, C_Id ....)
Values(:iDate,:iManager, :iC_Id...)
SPInsert_Order
Insert Into Orders (LO_Id, Pr_id, Counts... )
Values (:iLO_Id, :iPr_Id, :iCount)


 
Olivka ©   (2003-03-22 14:18) [7]

что такое у тебя SPInsert_LO


 
Наташа ©   (2003-03-22 14:30) [8]

SPInsert_LO это название компонента IbStorecProc, связанного с ХР вставки в list_order


 
Olivka ©   (2003-03-22 14:41) [9]

Сравнивать с FIBplus конечно, особо нельзя, а попробуй взять компоненты IBquery и выполнять запросы и вызовы хп через него. И не забудь в свойстве transaction этого компонента указать свой компонент транзакцию. Еще запусти SQL-монитор какой-нибудь и проверь логи. Там будут номера транзакций. так вот - все действия должны проходить под одним номером транзакции и она же должна в случае чего подтверждаться или откатываться


 
zacho ©   (2003-03-22 15:03) [10]

Все-таки попробуй поставить FB вместо IB, или более свежую версию IB. Кстати, напиши какой версией IB ты пользуешся.
А IBX или FIBPlus - особой разницы в твоем случае нет, идеология работы и с тем, и с тем одинаковая, все равно все они родились из FIBC


 
Наташа ©   (2003-03-22 15:07) [11]

IB6


 
zacho ©   (2003-03-22 15:33) [12]


> Наташа © (22.03.03 15:07)

IB 6.0 ? Тогда выбрось это глюкало и ставь хотя бы IB 6.5. А лучше, все-таки, FB. Посмотри www.ibase.ru, там есть информация по разным версиям IB и клонов.


 
Наташа ©   (2003-03-22 19:17) [13]

Всем Большое Спасибо!!!


 
zacho ©   (2003-03-22 19:47) [14]


> Наташа © (22.03.03 19:17)

Так проблема все-таки решилась или нет ? Любопытно, однако :)


 
Наташа ©   (2003-04-03 22:47) [15]

Проблема решилась.



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

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

Наверх




Память: 0.5 MB
Время: 0.015 c
7-67590
studentas
2003-03-03 12:49
2003.04.21
GetVolumeInformation


6-67413
Kremen
2003-02-28 05:12
2003.04.21
Определение IP тачи имея только её имя


1-67368
Саша
2003-04-10 09:53
2003.04.21
Как получить кол-во файловв определенной директории?


9-67078
drhdh
2002-11-17 18:50
2003.04.21
Разрешение


14-67545
CAMOBAP
2003-04-04 16:01
2003.04.21
i