Come registrare le modifiche ai dati in Access a livello di tabella?


8

Supporto un database di Access per un'organizzazione senza scopo di lucro. Abbiamo alcuni problemi con i dati che cambiano misteriosamente e ci sono stati alcuni, ehm, dibattiti amichevoli sul fatto che ciò sia causato da utenti che non sono i più esperti di computer o da alcuni dei miei processi in background.

Ho aggiunto alcuni controlli a livello di interfaccia utente per queste condizioni, ma vorrei mettere alcuni controlli a livello di tabella del database per registrare quando alcuni campi vengono modificati. In questo modo saprò della modifica se è stata avviata da un utente o semplicemente da una query di aggiornamento in esecuzione in background. Normalmente userei un on updatetrigger, ma per quanto ne so, Access non supporta i trigger. Esistono altre funzionalità di registrazione o simili a trigger disponibili in Access?

Risposte:


4

Sfortunatamente, Microsoft Access non ha trigger o qualcosa di simile ai trigger. Dalla parte superiore della mia testa, hai un paio di scelte poco attraenti:

  • Crea DateModifiede UserModifiedcolonne e aggiorna il tuo codice per includere questi valori. L'aspetto negativo è che conoscerai solo l'ultima persona che ha aggiornato un record e non avrai una cronologia da guardare ..
  • Mantenere il front-end di Access e trasferire le tabelle su un back-end di SQL Server Express. In questo modo, sarai in grado di utilizzare i trigger (nonché i processi di backup e altre cose interessanti).

4

Oltre al metodo LittleBobbyTables, c'è una terza opzione, che prevede la creazione di una _audittabella per ogni tabella normale e la scrittura di un'intera logica per supportarle, in modo che quando le cose vengono cambiate, si inserisce un record in quelle tabelle per farlo. (sai già quando stai salvando / aggiornando / eliminando i record, sì?)

Certo, è così che lo fanno i "database più grandi", il rovescio della medaglia è la tanta logica che devi fare manualmente per simulare il lavoro di tipo trigger su un server.


4

Si noti che, ad esempio, SQL Server Express è gratuito e potrebbe essere potenzialmente un sostituto drop-in per Access. Ciò ti darebbe la funzionalità di controllo di cui hai bisogno. Non credo che l'approccio della "tabella di audit" sia praticabile; presuppone che chiunque si colleghi al database lo faccia tramite il client "ufficiale" che ha quella logica. Con i trigger non c'è modo di ottenere i dati senza che vengano attivati ​​da alcun client casuale.

Una terza opzione è quella di Wireshark o simile per guardare effettivamente il traffico tra il client e il database (suppongo che questo non sarà in realtà TDS ma protocollo di condivisione file?), Quindi puoi vedere esattamente chi fa cosa, quando e da quale macchina. L'aspetto negativo di questo è che richiede molto spazio di archiviazione, alcuni script per eseguire l'analisi e può influire sulle prestazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.