Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как сделать откат внутри триггера

01.01.2007

Внутри триггера нельзя управлять транзакциями, поэтому генерируешь там исключение а откат транзакции делаешь в приложении, пославшем запрос. Естественно exception должен предварительно создан

SET TERM !!;

CREATE TRIGGER
" DELETE_INV"  FOR " TINV"
    ACTIVE BEFORE DELETE
    POSITION
10
    AS
   
BEGIN
        IF
(EXISTS (SELECT tOst.Id FROM tOst
                    WHERE tOst
.Id = tInv.Id))
        THEN
            EXCEPTION EST_OSTATOK
;
   
END !!

SET TERM
;!!
 
DBase.StartTransaction;
try
 
Query.ExecSQL;
 
DBase.Commit;
except
 
DBase.Rollback;
 
raise;    // Для последующей обработки
end;

Взято с https://delphiworld.narod.ru