Modules

5.22 Creare un sistema di log completamente automatico e centralizzato
  Marco Pizzamiglio (namor)
Nei database di esempio allegati a questa FAQ (Log WithEvents 97.mdb per la verione Access 97 e Log WithEvents 2000.mdb per la versione Access 2000) si fa uso di WithEvents per centralizzare la gestione degli eventi delle maschere: ad esempio eventi di log delle modifiche su file di testo.

Sfruttando la gestione degli eventi con WithEvents, con poche righe di codice è possibile creare un sistema di log completamente automatico e centralizzato, attivabile con un'unica riga di codice da qualsiasi maschera, che registra su file di testo data e ora della modifica, nome utente, nome PC, nome della maschera usata, azione intrapresa e valori di tutti i campi dei nuovi record inseriti, dei record modificati (prima e dopo la modifica) e dei record eliminati (anche in caso di eliminazioni multiple). In caso di aggiunta o eliminazione di campi dall'origine dati delle maschere il codice funzionerà senza bisogno di modifiche. Sono centralizzate anche le richieste di conferma per inserimenti/modifiche/eliminazioni.

Il codice VBA degli esempi allegati è largamente autodocumentato.

Avvertimento di Namor

L’esempio allegato a questa FAQ contiene un bug, e non ho ancora avuto tempo di studiarne le cause per risolverlo.

Per riprodurre il bug:
- aprire una delle maschere
- eliminare uno o più record
- alla richiesta di conferma premere ‘No’ per annullare l’eliminazione

A questo punto qualsiasi operazione successiva (inserimento, modifica o eliminazione) genera un errore 3420 ‘Oggetto non valido o non impostato’, e scegliendo ‘Fine’ il sistema di log si disattiva. Non ho ancora verificato se la classe termina o se resta in memoria ma la variabile dichiarata con WithEvents non intercetta più gli eventi.
Chiudendo e riaprendo la maschera la classe viene reistanziata e funziona, a meno che non si riproduca nuovamente il bug.

Ciò si verifica solo se la prima operazione eseguita dopo l’apertura della maschera è l’annullamento di un’eliminazione. Se invece la prima operazione è un’altra (inserimento, modifica o eliminazione confermata) il problema non si verifica più, nemmeno in caso di successivi annullamenti di eliminazioni.

Il bug è stato riscontrato su Access 97 e 2000. Pregherei chi ha Access XP e 2003 di provare a riprodurlo e comunicarci l’esito.

Appena trovo il tempo di esaminarlo a fondo, se riesco a risolverlo invierò un update al Sito Comune.

Namor

NB
Questa segnalazione è stata pubblicata sul newsgroup it.comp.appl.access il 26 novembre 2004 ed ha generato una discussione tra i frequentatori del NG.
Chi è interessato può leggere il thread completo a questo link:
http://groups.google.it/groups?hl=it&lr=&threadm=co6rhq%24ime%241%40news.newsland.it&rnum=1&prev=/groups%3Fas_ugroup%3Dit.comp.appl.access%26as_usubject%3Dbug%2520su%2520esempio%26as_uauthors%3Dnamor%26lr%3D%26hl%3Dit

Download:
 
  Log WithEvents.zip (94Kb) MSAccess97/2000 database


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.