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

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

Транзакции. откат не работает. [D6, IB6.x]


Наташа ©   (2003-03-22 08:42:00) 

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


Наташа   (2003-04-03 22:47:00) [1]

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


zacho   (2003-03-22 19:47:00) [2]


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

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


Наташа   (2003-03-22 19:17:00) [3]

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


zacho   (2003-03-22 15:33:00) [4]


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

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


Наташа   (2003-03-22 15:07:00) [5]

IB6


zacho   (2003-03-22 15:03:00) [6]

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


Olivka   (2003-03-22 14:41:00) [7]

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


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

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


Olivka   (2003-03-22 14:18:00) [9]

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


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

Вызов происходит следующим образом
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 13:56:00) [11]

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


Наташа   (2003-03-22 09:24:00) [12]

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


zacho   (2003-03-22 09:14:00) [13]


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

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


Наташа   (2003-03-22 09:08:00) [14]

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


zacho   (2003-03-22 09:04:00) [15]

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


Наверх

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