io di solito metto sul datamodule (non sulla form) un metodo "Save" per ogni contesto, se ad esempio con un datamodule permetto la modifica di clienti, pagamenti e documenti di vendita allora predispongo qualcosa del genere:
procedure OpenPagamenti;
procedure OpenClienti;
procedure OpenDocumento(ID: integer);
procedure OpenAll;
procedure ClosePagamenti;
procedure CloseClienti;
procedure CloseDocumento;
procedure CloseAll;
procedure SaveClienti;
procedure SavePagamenti;
procedure SaveDocumento;
procedure SaveAll;
In questo modo ogni volta che avrò bisogno di questo datamodule (ad esempio in 3 form: pagamenti, clienti, documenti e importfromcsv) avrò ereditato anche tutto il codice necessario alla gestione del caricamento/salvataggio.
Il codice SavePagamenti può essere qualcosa tipo:
procedure TDataModule1.SavePagamento;
begin
try
if SQLTransaction1.Active then
begin
// si presume che tutti i dataset abbiano postato
SqlPagamenti.ApplyUpdates;
SQLTransaction1.Commit;
end;
except
on E: exception do
raise exception.create('Impossibile memorizzare il pagamento: ' + #10 + e.Message);
end;
Risollevo l'eccezione perché abitualmente predispongo il codice del chiamante (che sia un button nella form o SaveAll nel datamodule) in modo che venga eseguito in un blocco try/except. In questo modo ogni chiamante può gestire l'eccezione come meglio crede.