Credo di capire quale sia il tuo intento. Non che si possa dire che sia giusto o sbagliato, dipende da quello che intendi fare.Originariamente inviato da 123delphi321
e' corretto in questa maniera, o ho sbagliato?
Secondo la mia personalissima concezione, è sbagliato perchè gli errori che si possono verificare sono tutt'al più errori di validazione dei dati (campi non corretti o non completati, violazioni di chiave, ecc.) pertanto, se l'utente che inserisce i dati commette un errore, la Commit non deve essere eseguita (e il tuo codice è compatibile con questa situazione poichè CommitRetaining non viene richiamata se ApplyUpdates non va a buon fine), ma non si dovrebbe eseguire il Rollback in caso di errore, poichè "io" - utente - devo avere la possibilità di modificare i dati a segnalazione ricevuta e riprovare a salvarli, senza dover ripartire da capo (che, se non sbaglio, è l'effetto che ottieni richiamando la RollbackRetaining).
In definitiva, io chiamerei solamente in successione i metodi ApplyUpdates e CommitRetaining sulla pressione di OK: se il salvataggio delle modifiche non va a buon fine, esso non viene eseguito, la transazione conserva il suo stato ed è possibile correggere i dati e ritentare.
Se l'utente preme ANNULLA, in tal caso è manifesto il desiderio di interrompere l'inserimento dei dati, quindi dimenticare tutto quello che è stato digitato; in questo frangente, ha più senso richiamare RollbackRetaining e poi chiudere il form.
In linea di massima credo che la tua implementazione sia corretta, ma io starei attento a separare la modifica dei dati di testata da quelli di dettaglio...
Fatti la seguente domanda: se ApplyUpdates per i dati di testata va a buon fine ma, per qualche motivo, ApplyUpdates per i dettagli no, cosa succede?
Non ho la risposta a questa domanda, ma serve per costringerti a valutare una simile condizione e verificare che non accada nulla di indesiderato.
Solitamente, io utilizzo una finestra di dialogo per inserire dati di testata e dettaglio; quando si inserisce una nuova testata, non consento di proseguire fino a quando essa non è confermata; in caso affermativo, abilito i controlli per l'inserimento dei dettagli (quindi il record di testata, dopo essere stato inserito, entra nella fase di "Edit" piuttosto che di "Insert").
Fai qualche prova tecnica per verificare che tutto funzioni anche nei casi più...disperati.
Ciao!![]()


Rispondi quotando