Una din noutățile aduse de Microsoft Access 2010 față de versiunile anterioare este introducerea macrocomenzilor de date (data macros).
Acestea permit adăugarea de elemente logice (business logic) la evenimente care se petrec în tabele (adăugarea, modificarea sau ștergerea înregistrărilor).
Astfel, macrocomenzile de date (data macros) sunt similare cu triggerii (database triggers) din alte baze de date, precum Microsoft SQL Server, Oracle Database, etc.
În acest tutorial, vom crea o tabelă pentru auditarea operațiilor din celelalte tabele ale bazei de date, iar cu ajutorul macrocomenzilor de date (data macros) se va completa automat această tabelă de audit.
Vom defini în continuare două tabele:
Audit – tabela pentru auditarea operațiilor;
Produse – tabela în care vom defini macrocomenzile de date (data macros) ce vor completa automat tabela Audit.
Tabela Audit are următoarea structură:
ID_Audit (Data Type: AutoNumber | Primary Key)
Data (Data Type: Date/Time | Format: General Date)
Operatie (Data Type: Text | Field Size: 10)
TabelaDenumire (Data Type: Text | Field Size: 50)
TabelaID (Data Type: Number)
ValoriVechi (Data Type: Text)
ValoriNoi (Data Type: Text)

Tabela Produse are următoarea structură:
ID_Produs (Data Type: AutoNumber | Primary Key)
Produs (Data Type: Text | Field Size: 50 | Required: Yes | Allow Zero Length: No | Indexed: Yes (No Duplicates))
Pret (Data Type: Number | Field Size: Decimal | Format: Standard | Scale: 2)

Macrocomenzile de date (data macros) se adăugă din meniul Design -> Create Data Macros, așa cum este evidențiat și în captura de ecran anterioară. Ele sunt de cinci tipuri:
- After Insert – se execută după adăugarea unei înregistrări în tabela respectivă
- After Update – se execută după modificarea unei înregistrări în tabela respectivă
- After Delete – se execută după ștergerea unei înregistrări din tabela respectivă
- Before Delete – se execută înaintea ștergerii unei înregistrări din tabela respectivă
- Before Change – se execută înaintea modificării unei înregistrări în tabela respectivă
În acest tutorial vom folosi primele trei tipuri: After Insert, After Update și After Delete.
Pentru a audita operațiile de adăugare de înregistrări folosim macrocomanda de date (data macro) After Insert.
Când se apelează această macrocomandă, se adăugă o înregistrare nouă în tabela Audit, folosind Action Catalog -> Data Blocks -> Create a Record In Audit cu Alias-ul InregistrareNouaInAudit.
Aliasul reprezintă o structură de date identică cu o înregistrare din tabela Audit și este folosit pentru a atribui valori câmpurilor din înregistrarea adăugată.
Atribuirile se efectuează folosind Action Catalog -> Data Actions -> SetField.
Completăm la Name câmpul din Alias, iar la Value valoarea atribuită, astfel:
InregistrareNouaInAudit.Data = Now() (folosim funcția Now() pentru a înregistra data și ora operației)
InregistrareNouaInAudit.Operatie = ‘Adaugare’ (tipul operației auditate)
InregistrareNouaInAudit.TabelaDenumire = ‘Produse’ (denumirea tabelei auditate)
InregistrareNouaInAudit.TabelaID = [Produse].[ID_Produs] (valoarea câmpului ID pentru înregistrarea adăugată în tabela auditată)
InregistrareNouaInAudit.ValoriNoi = [Produse].[Produs] & ‘ | ‘ & CStr([Produse].[Pret]) (valorile câmpurilor din înregistrarea adăugată în tabela auditată, concatenate cu & și despărțite prin | ; valorile numerice sunt convertite în text folosind funcția CStr())

Prin analogie, pentru a audita operațiile de modificare a înregistrărilor folosim macrocomanda de date (data macro) After Update, astfel:
InregistrareNouaInAudit.Data = Now() (data și ora operației)
InregistrareNouaInAudit.Operatie = ‘Modificare’ (tipul operației auditate)
InregistrareNouaInAudit.TabelaDenumire = ‘Produse’ (denumirea tabelei auditate)
InregistrareNouaInAudit.TabelaID = [Produse].[ID_Produs] (valoarea câmpului ID pentru înregistrarea modificată în tabela auditată)
InregistrareNouaInAudit.ValoriVechi = [Old].[Produs] & ‘ | ‘ & CStr([Old].[Pret]) (valorile anterioare ale câmpurilor modificate în tabela auditată; Aliasul [Old] reprezintă o structură de date identică cu o înregistrare din tabela auditată și este folosit pentru stoca valorile anterioare ale câmpurilor din înregistrarea modificată)
InregistrareNouaInAudit.ValoriNoi = [Produse].[Produs] & ‘ | ‘ & CStr([Produse].[Pret]) (valorile noi ale câmpurilor din înregistrarea modificată în tabela auditată)

De asemenea, pentru a audita operațiile de ștergere a înregistrărilor folosim macrocomanda de date (data macro) After Delete, astfel:
InregistrareNouaInAudit.Data = Now() (data și ora operației)
InregistrareNouaInAudit.Operatie = ‘Stergere’ (tipul operației auditate)
InregistrareNouaInAudit.TabelaDenumire = ‘Produse’ (denumirea tabelei auditate)
InregistrareNouaInAudit.TabelaID = [Produse].[ID_Produs] (valoarea câmpului ID pentru înregistrarea ștearsă din tabela auditată)
InregistrareNouaInAudit.ValoriVechi = [Old].[Produs] & ‘ | ‘ & CStr([Old].[Pret]) (valorile anterioare ale câmpurilor din înregistrarea ștearsă din tabela auditată)

Astfel, pe măsură ce vom efectua operații cu înregistrările din tabela Produse, acestea vor fi auditate și înregistrate automat în tabela Audit.

În tabela Audit putem vizualiza istoricul generat al tuturor operațiilor efectuate în tabela Produse.

Pentru lămuriri suplimentare, puteți să descărcați baza de date Audit
![]()