в інший. p align="justify"> З метою виконання в додатку, що розробляється інструкцій (операторів) мови T-SQL для обробки транзакцій був розміщений компонент ADOQuery (з вкладки ADO) на модулі даних і перейменований в TRAN.
Створено обробник події BeforePost для набору даних Ціна, який буде спрацьовувати безпосередньо перед збереженням запису в Замовлення (як нового запису, так і вже існуючої виправленої записи)
Ккод обробника:
TDM.beforpost (DataSet: TDataSet); DM.zakaz.State = dsInsert then_v_cenu: = true;. SQL.Clear;. SQL.Add ('BEGIN TRAN');. ExecSQL; p>
end;
Наведений програмний код у разі додавання в ЗАМОВЛЕННЯ саме нового запису встановить для глобальної змінної Dobavit_v_cenu значення True, щоб при спрацьовуванні слідом події AfterPost автоматично б додалася і зберігся запис в Ціна. В іншому випадку, якщо Dovabit_v_cenu = false, що говорить про те, що була виправлена ​​вже існуюча запис в ЗАМОВЛЕННЯ, то автоматично додаватися нова запис в Ціна не буде. p align="justify"> Створено обробник події AfterPost для набору даних ЗАМОВЛЕННЯ, який спрацює відразу після збереження поточного запису набору даних ЗАМОВЛЕННЯ.
Код обробника
TDM.aftepost (DataSet: TDataSet); DM do beginDobavit_v_cenu = true then align = "justify"> Äîáà âèëè çà ïèñü Гў Г–ГҐГГі '); _v_cenu: = false;;. SQL.Clear;. SQL.Add ('COMMIT TRAN');. ExecSQL;. SQL.Clear;. SQL.Add ('ROLLBACK TRAN');. ExecSQL;. Close;. Open;;;;
Наведений програмний код містить конструкцію TRY .. EXCEPT, яку зручно використовувати в додатку для обробки виключень при використанні механізму транзакцій. Конструкція TRY .. EXCEPT працює так:
В§ якщо при виконанні операторів блоку TRY виникає виняток, то управління передається першому оператору блоку EXCEPT;
В§ якщо виключення не виникло, то оператори блоку EXCEPT не виконуються.
Якщо в блоці TRY виникає виняток, виконується інструкція В«ROLLBACK TRANВ» мови T-SQL, що виробляє відкат всіх змін у БД, які були виконані з початку транзакції.
Створено обробник події OnPostError для набору даних ЗАМОВЛЕННЯ
Код обробника:
TDM.error (DataSet: TDataSet; E: EDatabaseError; Action: TDataAction);. SQL.Clear;. SQL.Add ('ROLLBACK TRAN');. ExecSQL;. Close;. Open;
end;
Наведений програмний код спрацьовує при виникненні помилк...