Recupero old valore combobox

di il
12 risposte

Recupero old valore combobox

E possibile recuperare il valore di una combo prima di selezionarne uno nuovo ?

Ho provato con oldvalue ma non ci sono riuscito, stesso risultato con controls.

Grazie

12 Risposte

  • Re: Recupero old valore combobox

    A che servirebbe?

    1) puoi usare una variabile da settare prima che la combo cambi valore e con un pulsantino "annulla" o "ripristina" setti la combo al valore iniziale.

    2) un file log dove metti l'ultimo valore della combo con data e ora della modifica e con un pulsante "back" leggi il penultimo valore della sezione combobox (al successivo back vai al terzultimo e così via fino al primo valore) come fa il pulsante annilla di un qualsiasi editor.

    ma ne vale la pena? una combo serve per immetere dati che mette l'utente in base alle sue esigenze (A) o per filtrare dati (B). tutte operazioni che possono essere sempre modificate e ripristinate.

    caso (A) selezione un cliente o un fornitore da associare ad un documento: so a quale cliente o fornitore inserire non serve andare a modificare per poi ripristinarlo.

    caso (B) sto filtrando per provincia, so quale provincia andare a filtrare non mi serve tornare indietro.

    il file di log è utile quando l'utente ti dice che ha inserito il cliente pinco pallo e si ritrova con panco pillo (non ti dirà mai di aver sbagliato dirà solo che il programma non funziona) magari aggiungi anche l'utente che ha fatto la modifica.

  • Re: Recupero old valore combobox

    14/04/2025 - Scolaretto ha scritto:

    E possibile recuperare il valore di una combo prima di selezionarne uno nuovo ?

    Ho provato con oldvalue ma non ci sono riuscito, stesso risultato con controls.

    Grazie

    La combo esegue un Commit all'evento BeforeUpdate, solo li puoi intercettare, se nessuno interrompe il commit l'OldValue=NewValue e non c'è modo di tenere traccia... 

    Anche se tu predisponessi una variabile, come la aggiorneresti...?
    Se non l'aggiorni il valore Old non sarà attendibile... supponi di cambiare valore 3 volte... quella variabile che valore dovrebbe avere ed in base a quale Evento lo andresti a modificare...?

    1) Cambio Valore A--->B		Su Evento XXX Memorizzo Old=A (può essere solo il BeforeUpdate)
    2) Cambio Valore B--->C		Su Evento XXX Memorizzo Old=B (può essere solo il BeforeUpdate)
    3) Cambio Valore C--->A		Su Evento XXX Memorizzo Old=C (può essere solo il BeforeUpdate)

    L'unico modo è generare un'array di valorie o una collection, tipo registro ed andare a ripescare N(x) in base alla tua esigenza.

  • Re: Recupero old valore combobox

    Dipende dal senso che ha il ripristino.

    if (old<>'') then 

      old=combo

    endIf

    in questo modo old ha sempre il valore iniziale (apertura form).

    quando apri il form old=''

  • Re: Recupero old valore combobox

    14/04/2025 - sihsandrea ha scritto:

    Dipende dal senso che ha il ripristino.

    if (old<>'') then 

      old=combo

    endIf

    in questo modo old ha sempre il valore iniziale (apertura form).

    quando apri il form old=''

    Su quale Evento di Combo lo fai...? Prova a cambiare valore 2 volte per giocare... e vedi che succede... il secondo cambio annulla il primo è da considerare giusto...?

    Va attribuito un Evento Target che definisce il cambio ed il Commit e questo è BeforeUpdate... e come tale...

  • Re: Recupero old valore combobox

    Pardon, inizialmente avevo usato due variabili per modificarlo ad una sola senza correggere il resto...

    if (old='') then 

      old=combo

    endIf

    in questo modo old ha sempre il valore iniziale (apertura form).

    quando apri il form old=''

    corretto. l'evento è quello BeforeUpdate di cuo parla alex.

    al primo cambio la variabile è vuota e assegna il valore della combo

    nei successivi la variabile è piena e non assegna nessun valore.

    setti la variabile a "" solo quando confermi il valore della combo e non interessa più il valore iniziale o all'apertura del form.

    ma potresti anche settare old all'apertura e ripristinare in qualsiasi momento senza nessuna intercettazione di eventi sulla combo.

    all'apertura o nuovo record old=combo

    fai tutte le modifiche e se vuoi ripristinare setti combo a old.

    fine.

  • Re: Recupero old valore combobox

    Vediamo se ho capito, se voglio salvare il valore della combo prima che questo cambi, non ho bisogno della cronologia ma solo dell'ultimo valore, dovrei utilizzare l'evento beforeupdate della combo, ho provato ma non ci riesco.

    Per inciso la combo viene valorizzata con una collection che poi viene ordinata.

    grazie

    Private Sub CboInve_BeforeUpdate(Cancel As Integer)
        xOldValue = Me.CboInve
           
    End Sub
  • Re: Recupero old valore combobox

    14/04/2025 - Scolaretto ha scritto:

    Per inciso la combo viene valorizzata con una collection che poi viene ordinata.

    La combo la usi come filtro o come lookup?

    Mi spiego: è un Array di valori a se stante e il contenuto lo usi come filtra per....

    Oppure appartiene ad una tabella collegata alla principale da cui ti ricavi l'ID da inserire nel record?

    Se filtro stai perdendo tempo....

    Se dblookup allora si spiegherebbe nel momento in cui vai a modificare il record e piuttosto che annullare le modifiche al record vuoi annullare il cambiamento del singolo campo.

    In questo caso quando il dataset cambia (sei nel record x) memorizzi il valore della combo (il suo id) e se decidi di annullare la modifica (non del record ma del singolo campo) ripristini il valore memorizzato poi salvi o annulli la modifica del record e ti memorizzo il valore della combo.

    Quando ti sposti di record memorizzi il nuovo valore.

    Non devi intercettare nessun cambiamento di combo.

  • Re: Recupero old valore combobox

    14/04/2025 - Scolaretto ha scritto:

    Vediamo se ho capito, se voglio salvare il valore della combo prima che questo cambi, non ho bisogno della cronologia ma solo dell'ultimo valore, dovrei utilizzare l'evento beforeupdate della combo, ho provato ma non ci riesco.

    Ciao, 

    prova a provare così:

    Option Compare Database
    Option Explicit
    
    ' Set old variable
    Private oldValue As Variant
    
    ' COMBO BOX GOT FOCUS EVENT
    Private Sub ComboBoxSelect_GotFocus()
        ' Save old value
        oldValue = Me.ComboBoxSelect.Value
    End Sub
    
    ' DISPLAY COMBO BOX VALUES
    Private Sub ComboBoxSelect_AfterUpdate()
        ' Show valus
        MsgBox "New Value : " & Me.ComboBoxSelect.Value & vbCrLf & "Old Value : " & oldValue
    End Sub

    In questo caso oldValue non cambia fino a quando non rientri nella combobox

  • Re: Recupero old valore combobox

    Era in effetti il caso che avevo detto di analizzare... perchè se uno si mette a cambiare N volte il valore prima di renderlo definitivo, si perde il valore INIZIALE che non è quello prima del Commit... appunto.

    Questo metodo suggerito da Franco è funzionale sicuramente a questa problematica.

  • Re: Recupero old valore combobox

    14/04/2025 - @Alex ha scritto:

    Era in effetti il caso che avevo detto di analizzare... perchè se uno si mette a cambiare N volte il valore prima di renderlo definitivo, si perde il valore INIZIALE che non è quello prima del Commit... appunto.

    Si @Alex ... sicuramente dipende dai scenari e quindi l'uso che si vuol fare dei old values  ;-)
    Validissimo il sistema di storicizzare in array  o collection come hai accennato.

  • Re: Recupero old valore combobox

    Grazie Domani mattina provo e vi faccio sapere.

    Buona serata

  • Re: Recupero old valore combobox

    La soluzione che aveva indicato By65franco funziona con piccole modifiche riportate qui sotto, per completare il quadro le tre combo che sono presenti nella maschera sono valorizzate andando a leggere il contenuto della form mediante un recordsetclone, che a sua volta valorizza delle collection che diventanto la RowSource delle combo.

    Grazie a tutti 

    Problema risolto

    Option Compare Database
    
    Private OldValue As String
    Private Sub CboInve_AfterUpdate()
        '' Ultimo valore selezionato
        If Len(OldValue) = 0 Then OldValue = Me.CboInve.Value
        MsgBox "New Value : " & Me.CboInve.Value & vbCrLf & "Old Value : " & OldValue
    End Sub
    Private Sub CboInve_GotFocus()
        '' Ultimo valore selezionato
        OldValue = Nz(Me.CboInve.Value, "")
    End Sub
Devi accedere o registrarti per scrivere nel forum
12 risposte