Głowiłem się długo i chyba rozwikłałem zagadkę, więc napisze dla potomnych jak to działa (bo ciężko cokolwiek o tym w sieci znaleźć).
Kiedy w komponencie IBDATABASE ustawimy jako DeofultTransaction jakiś komponent IBTRANSACTION, to w w momencie połączenia z bazą ustanawiana jest transakcja kutra trwa nieprzerwanie. Gdy chcemy zatwierdzić zmiany lub cofnąć wszystko co nie zostało zatwierdzone wystarczy wywołać w komponencie IBTRANSACTION CommitRetaining lub RollbackRetaining. W przciwieństwie do tego co podają książki (np Pana Gawrońskiego) nie trzeba pisać:
if not InTransaction then
IBTRANSACTION.StartTransaction;
Ponieważ transakcja trwa od czasu połączenia się z bazą.
Sytuacja jest identyczna kiedy IBTRANSACTION jest podłączone do DataSeta, transakcja trwa od momentu
DATASET.Active := true;
.