Ripristino valori precedenti dei controlli

di il
5 risposte

Ripristino valori precedenti dei controlli

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

  • Re: Ripristino valori precedenti dei controlli

    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….

  • Re: Ripristino valori precedenti dei controlli

    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?

  • Re: Ripristino valori precedenti dei controlli

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

  • Re: Ripristino valori precedenti dei controlli

    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

  • Re: Ripristino valori precedenti dei controlli

    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