Главная » Delphi » Обработка транзакций

0

Технология ADO поддерживает обработку транзакций, что  реализовано в классе TADOConnection. В качестве примера рассмотрим фрагмент исходного кода прило жения  базы данных  (листинг 9.3).

Листинг 9.3. при помощи компонента TADOConnection

procedure TMainForm.Button1Click(Sender: TObject);

begin

if TNewOrderForm.Execute then begin

ADOConnection1.BeginTrans;

try

// Сначала создать запись Orders

adodsOrders.Insert;

adodsOrders.FieldByName(‘CustNo’).Value :=

adodsCustomer.FieldByName(‘CustNo’).Value;

adodsOrders.FieldByName(‘EmpNo’).Value :=

adodsEmployee.FieldByName(‘EmpNo’).Value;

adodsOrders.FieldByName(‘Date’).Value := Date;

ShowMessage(IntToStr(adodsOrders.

?FieldByName(‘OrderNo’).AsInteger));

adodsOrders.Post;

// Затем создать элементы Order Line. cdsPartList.First;

while not cdsPartList.Eof do begin adocmdInsertOrderItem.Parameters.ParamByName

?(‘iOrderNo’).Value := adodsOrders.FieldByName(‘OrderNo’).Value;

adocmdInsertOrderItem.Parameters.ParamByName

?(‘iPartNo’).Value := cdsPartListPartNo.Value; adocmdInsertOrderItem.Execute; cdsPartList.Next;

end; adodsOrderItemList.Requery([]); ADOConnection1.CommitTrans; cdsPartList.EmptyDataSet;

except ADOConnection1.RollbackTrans; raise;

end;

end;

end;

Метод,  представленный в листинге 9.3, отвечает за создание заказа.  Данная тран закция состоит из двух частей. В первой создается запись  в таблице Order, а во вто рой —  добавляются элементы в таблицу  OrderItem. В этом  примере происходит об новление двух таблиц, из за чего имеет смысл поместить их в единую транзакцию.

Ниже  представлена структура такой транзакции:

begin ADOConnection1.BeginTrans; try

// Сначала создать запись Orders

// Затем создать элементы Order Line.

ADOConnection1.CommitTrans;

except

ADOConnection1.RollbackTrans;

raise;

end;

end;

end;

Как видно  из примера, транзакция реализована внутри  блока  try..except. Метод ADOConnection1.BeginTrans() начинает транзакцию, а  метод   ADOConnection1. CommitTrans() завершает ее (фиксирует). Если при  фиксации транзакции возникает какой либо  сбой,  то создается исключение и вызывается метод  ADOConnection1. RollbackTrans(), который отменяет все внесенные в таблицу изменения.

Резюме

В настоящей главе были рассмотрены компоненты dbGo  for ADO, которые для доступа к базам данных используют технологию Microsoft ADO.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии