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: |