+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 8 su 8

VB Access 2010 - Intercettazione modifica, valore attuale e valore precedente

  1. #1
    AKIRO non è in linea Scolaretto
    MS Access 2010

    Ciao a tutti, avrei bisogno di risolvere un problema che, non prima di porvelo ho cercato dappertutto ma non ho trovato nulla. A me basterebbe comprendere se una soluzione c'è e in che direzione andare, poi vedo di arrangiarmi.
    Il problema: in una Form ho inserito una serie di oggetti (combobox, textbox, ect) che alimentano un unico record di una tabella, ho anche creato una routine che alimenta un file Log.txt esterno per memorizzare gli eventi più importanti. Proprio in quest'ultimo, in caso di modifiche, vorrei aggiungere quale dato è stato variato, ma come posso intercettare l'oggetto selezionato ed il valore del suo contenuto precedente e quello attuale? Guardando in giro ho letto qualcosa in merito alla proprietà Dirty (Form.Dirty) e poi old value e new value.

    Grazie.

  2. #2
    Intanto la sezione Pausa Caffè non è adatta. Sposto io nella sezione Access, invitandoti a dare un'occhiata al regolamento di questo forum.
    ℹ️ Leggi di più su AntonioG ...

  3. #3
    L'avatar di Max.Riservo
    Max.Riservo non è in linea Scribacchino
    Se modifichi un record (un qualsiasi campo del record) di una maschera associata (con ovviamente i controlli associati), scateni l' evento Dirty (evento della maschera).
    Altro evento della maschera che potrebbe esserti utile : BeforeUpdate.

    Sui controlli associati, hai a disposizione le proprietà OldValue e NewValue che sono abbastanza autoesplicative .....
    Sempre sui controlli hai a disposizione i seguenti eventi : Change, BeforeUpdate, Exit e forse (su versioni successive alla 2000) Validate (se non mi confondo con altri ambienti di sviluppo che al momento non ho sotto mano)

    Quale sarebbe quindi il problema ?

  4. #4
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Prova a vedere se questo DEMO ti può essere di aiuto:http://forum.masterdrive.it/access-7...-tracer-69222/

    Consente le configurazioni degli EVENTI(Aggiunta/Cancellazione/Modifica) e salva in un LOG.
    ℹ️ Leggi di più su @Alex ...

  5. #5
    AKIRO non è in linea Scolaretto
    Quote Originariamente inviato da Max.Riservo Visualizza il messaggio
    Se modifichi un record (un qualsiasi campo del record) di una maschera associata (con ovviamente i controlli associati), scateni l' evento Dirty (evento della maschera).
    Altro evento della maschera che potrebbe esserti utile : BeforeUpdate.

    Sui controlli associati, hai a disposizione le proprietà OldValue e NewValue che sono abbastanza autoesplicative .....
    Sempre sui controlli hai a disposizione i seguenti eventi : Change, BeforeUpdate, Exit e forse (su versioni successive alla 2000) Validate (se non mi confondo con altri ambienti di sviluppo che al momento non ho sotto mano)

    Quale sarebbe quindi il problema ?

    Ciao e grazie intanto...
    Che vi fossero delle proprietà sui controlli più o meno utili a quanto sto cercando diciamo che ne ero al corrente, ma forse non mi sono spiegato bene. Per evitare di "sondare" controllo per controllo (e di oggetti ne ho davvero molti) volevo capire se esiste un modo per intercettare quale controllo è stato selezionato e quali i suoi valori (vecchi e nuovi) al momento del salvataggio (o durante la modifica). Un po come farebbe la routine dietro il tasto UNDO.
    Un esempio: l'utente del DB modifica il campo NOME da Pippo a Pluto e salva... Bene, voglio scrivere questa informazione in un log (data-ora/utente/campo modificato/ valore vecchio - valore nuovo).

    Ora vado a dare un occhiata anche al suggerimento di @Alex
    Bye

  6. #6
    L'avatar di muttley005
    muttley005 non è in linea Topo di biblioteca
    Ti eri già spiegato bene ... e le indicazioni di Max e Alex sono altrettanto chiare
    Devi "giocare" con quelle funzioni ... quando avrai provato ciò che ti è stato ben suggerito se hai problemi posta il codice di ciò che hai fatto e vediamo di aiutarti a correggerlo

  7. #7
    AKIRO non è in linea Scolaretto
    Dunque, ho fatto alcuni tentativi più che altro incentrati sul sull'evento BeforeUpdate della form ed in effetti ogni volta che si modifica un dato la proprietà Dirty passa da "Falso" a "Vero" (a dirla tutta il "Vero" mi tornava anche solo premendo il tasto modifica e salvando senza toccare nulla...). Detto ciò, ho riportato e scritto in parte il seguente codice:

    Public Sub Form_BeforeUpdate(Cancel As Integer)
    Dim ctlC As Control
    If Me.Dirty Then
    For Each ctlC In Me.Controls
    If ctlC.ControlType = acComboBox Then MsgBox ctlC.Value & " - " & ctlC.OldValue
    Next ctlC
    End If
    End Sub


    Con questo questo ho potuto notare come passa a rassegna ogni controllo in maschera di tipo "ComboBox" e di ognuno notifica nell'ordine il NUOVO valore e il VECCHIO valore. A questo punto di tutti i ComboBox che riportano valori differenti, significherà che sono stati modificati. Bene... ma quali sono? Come posso ottenere il nome dell'oggetto?

    Grazie per un altro vostro prezioso aiuto...
    Akiro
    Ultima modifica di AKIRO; 31-08-2016 15:52 

  8. #8
    AKIRO non è in linea Scolaretto
    ...bastava un pochino di impegno in più (mea culpa).
    Il nome dell'oggetto stava "dietro l'angolo", ovvero ctlC.Name

    Grazie per l'aiuto!!!

    Akiro

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 1
    Ultimo Post: 30-08-2016, 18:21
  2. Report: valore record precedente
    Da dodo47 nel forum Microsoft Access
    Risposte: 18
    Ultimo Post: 22-10-2012, 09:32
  3. valore precedente
    Da mobile75 nel forum Microsoft Access
    Risposte: 6
    Ultimo Post: 04-07-2012, 21:33
  4. Access - valore precedente in un report
    Da dodo47 nel forum Microsoft Access
    Risposte: 3
    Ultimo Post: 26-01-2012, 15:04
  5. Recuperare valore del nodo precedente
    Da elsinore nel forum Delphi
    Risposte: 0
    Ultimo Post: 21-02-2008, 16:49