Yo utilizo la versión 7.0.3-stable con Firebird y Delphi 7 y siempre dejo ZConnection.AutoCommit en True, y luego si quiero manejar las transacciones explicitas lo hago con
Código Delphi
[-]
ZConnection.StartTransaction;
try
...
ZConnection.Commit;
except
ZConnection.Rollback;
end;
es decir como en tu primer post, solo que dejando la propiedad AutoCommit en True y nunca he tenido problemas con la transacción o se guardan todos los cambios o no se guarda nada, eso si la propiedad TransactionIsolation la pongo a tiReadCommitted.