Hola....
Por lo General yo en ese caso trabajo con cached...
O sea pongo el query en Cached... dejo el usuario haga los cambios que tiene que hacer y luego, cuando guarda realizo un ApplyUpdates. En caso de cancelar hago un CancelUpdates...
Ten en cuenta que un query en cached trabaja con los datos de forma local y una vez que aplicas los cambios recién se envían al servidor...
En caso que tengas varios querys en cached y tengas que aplicar los cambios... puedes hacerlo de la siguiente manera...
Código Delphi
[-]
Try
Transaccion.StarTransaction;
if Qry1.UpdatesPending then Qry1.ApplyUpdates;
if Qry2.UpdatesPending then
Qry2.ApplyUpdates;
if Qry3.UpdatesPending then
Qry4.ApplyUpdates;
Transaccion.Commit;
Except
Transaccion.RollBack;
end;
En tu caso:
Si presiona el boton grabar haces todos los applyupdates, si presiona el boton cancelar haces los cancelupdates;
Código Delphi
[-]
Qry1.CancelUpdates;
Qry2.CancelUpdates;
Qry3.CancelUpdates;