Sin entrar en el fondo de la cuestión, para que no salte una
exception cuando hay una transaction activa, yo modificaría el código de esta manera
Código SQL
[-]
if MessageDlg('¿Desea aplicar los cambios?',mtConfirmation,mbYesNo,0) = MrYes then
Begin
StatusBar1.SimpleText := ' Aplicando cambios en base de datos, Espere por favor...';
if not Dm.Transaction.Active then
Dm.Transaccion.StartTransaction;
Try
Dm.DatosInternos.Post;
Dm.Transaccion.Commit;
except
Dm.Transaccion.Rollback;
End;
Bloqueo(False);
StatusBar1.SimpleText := '';
end;