Ripristino valori precedenti dei controlli

di alberigo67 il
5 risposte

Buongiorno a tutti.

Ho un form associato a una tabella e di conseguenza i suoi controlli associati ai rispettivi campi.

Il mio scopo è che sull'evento Unload del form, e in seguito alla risposta negativa se si vogliono salvare le modifiche apportate, vengano ripristinati nei controlli i valori precedenti alla modifica. 

Di seguito il codice da me utilizzato:

	Private Sub Form_Unload(Cancel As Integer)
    	If SalvataggioOK = False Then
        	If MsgBox(Testi_M(Lingua, "comune", "exit_no_save"), vbQuestion + vbYesNo, "GestionaleGE1") = vbYes Then
            	If Inserimento = True And Modifica = False Then
                	DoCmd.SetWarnings False
                	DoCmd.RunCommand acCmdSelectRecord
                	DoCmd.RunCommand acCmdDelete
                	DoCmd.SetWarnings True
            	Else
                	UndoEdits
            	End If
        	Else
            	Cancel = True
        	End If
    	End If
	End Sub
    
    Private Sub UndoEdits()
    	For Each ctlC In Me.Controls
        	If ctlC.ControlType = acTextBox Then
            	ctlC.Value = ctlC.OldValue
        	ElseIf ctlC.ControlType = acComboBox Then
            	ctlC.Value = ctlC.OldValue
        	End If
    	Next ctlC
	End Sub

Inutile dire che il valore precedente non viene ripristinato.

Ho utilizzato lo stesso sistema in un form con i controlli non associati con una tabella e funziona perfettamente. E' possibile utilizzare questo sistema anche per controlli associati?

Grazie per ogni tipo di suggerimento.

5 Risposte

  • Ma stai usando le transazioni….? Mi pare di no… quindi come pensi di intercettare una modifica su unload…?

    Innanzitutto dovresti verificare se la proprietà Dirty di Form è True o False, se False non è attiva alcuna transazione o modifica, quindi inutile fare quello che dici, nel caso sia True, fai un ciclo sui controlli bound della form e verifica se ctl.Value=ctl.OldValue… eventualmente sostituisci se si vuole consolidare o meno… e nel caso SALVI e chiudi.

    P.S. ricorda che i Controlli Bound non sono solo TextBox e Combo… ci sono ListBox, RadioButton CheckBox OptionGroup….

  • La proprietà Dirty è True non appena modifico il contenuto di un controllo ma quando chiudo la maschera ed entra nell'evento Unload del form è di nuovo False. Quindi io la modifica del dato l'ho effettuata ma, essendo il controllo bound e quindi la variazione del dato già scritta nel campo della tabella, la proprietà Dirty torna False. Deduco quindi che, a meno che i dati nella tabella li inserisco con un INSERT e il form (e relativi controlli) non è connesso direttamente alla tabella (unbound), il mio proposito diventa irrealizzabile. Giusto?

  • Nel momento in cui scrivi o sovrascrivi un dato hai perso i dati precedenti.

  • 30/09/2024 - alberigo67 ha scritto:


    La proprietà Dirty è True non appena modifico il contenuto di un controllo ma quando chiudo la maschera ed entra nell'evento Unload del form è di nuovo False. Quindi io la modifica del dato l'ho effettuata ma, essendo il controllo bound e quindi la variazione del dato già scritta nel campo della tabella, la proprietà Dirty torna False. Deduco quindi che, a meno che i dati nella tabella li inserisco con un INSERT e il form (e relativi controlli) non è connesso direttamente alla tabella (unbound), il mio proposito diventa irrealizzabile. Giusto?

    Servirebbe capire meglio, quanto dici è l'analisi corretta, tuttavia puoi valutare se l'evento transazionale BeforeUpdate può fare al caso tuo.

    Ad esempio prova a modificare un dato… vedrai che l'evento di cui sopra non si genera finché non tenti di modificare il bookmark ovvero spostamento record o chiusura form che probabilmente potrebbero soddisfare la richiesta.

    A quel punto verifica sia Dirty che value ed oldvalue.

    Se tuttavia questo non soddisfa a pieno, allora devi operare in modo differente, usando le transazioni.

    https://codekabinett.com/rdumps.php?Lang=2&targetDoc=how-to-access-transaction

    Questo link probabilmente si avvicina molto a quanto devi fare:

    https://stackoverflow.com/questions/1117155/can-i-wrap-an-access-form-with-a-transaction

  • 30/09/2024 - @Alex ha scritto:


    30/09/2024 - alberigo67 ha scritto:


    La proprietà Dirty è True non appena modifico il contenuto di un controllo ma quando chiudo la maschera ed entra nell'evento Unload del form è di nuovo False. Quindi io la modifica del dato l'ho effettuata ma, essendo il controllo bound e quindi la variazione del dato già scritta nel campo della tabella, la proprietà Dirty torna False. Deduco quindi che, a meno che i dati nella tabella li inserisco con un INSERT e il form (e relativi controlli) non è connesso direttamente alla tabella (unbound), il mio proposito diventa irrealizzabile. Giusto?

    Servirebbe capire meglio, quanto dici è l'analisi corretta, tuttavia puoi valutare se l'evento transazionale BeforeUpdate può fare al caso tuo.

    Ad esempio prova a modificare un dato… vedrai che l'evento di cui sopra non si genera finché non tenti di modificare il bookmark ovvero spostamento record o chiusura form che probabilmente potrebbero soddisfare la richiesta.

    A quel punto verifica sia Dirty che value ed oldvalue.

    Se tuttavia questo non soddisfa a pieno, allora devi operare in modo differente, usando le transazioni.

    https://codekabinett.com/rdumps.php?Lang=2&targetDoc=how-to-access-transaction

    Questo link probabilmente si avvicina molto a quanto devi fare:

    https://stackoverflow.com/questions/1117155/can-i-wrap-an-access-form-with-a-transaction

    Per il momento grazie dei suggerimenti…ci lavorerò sopra perchè mi hai dato un paio di incipit a cui non avevo pensato.

Devi accedere o registrarti per scrivere nel forum
5 risposte