Tracer changement données

Résolu
platypus69 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   -  
 tessel75 -
Bonjour,

je suis en train de créer un traceur sous ACCESS 2007, pour garder un historique des modifications faite par l'utilisateur. tous fonctionne bien sauf pour certaines valeurs. Si la valeur du champs était vide avant de rentrer une valeur pas d'ajout a la table historique et inversement, si l'utilisateur supprime la donnée, pas de traçage.

Ci-joint dessous le programme de traçage.

Private Sub Form_BeforeUpdate(Cancel As Integer)
Call Donnee_compte 'appel la fonction pour les info users
DoCmd.SetWarnings False ' désactive message d'alerte

'déclaration des variables
Dim sql As String
Dim i As Long

'boucle pour balayer le NB de controleurs
For i = 0 To Me.Controls.Count - 1
If Me.Controls(i).ControlType = 106 Or Me.Controls(i).ControlType = 109 Or Me.Controls(i).ControlType = 111 Then
    If Me.Controls(i).Value <> Me.Controls(i).OldValue Then    'si valeur différente
        'MsgBox Me.Controls(i).ControlSource & "/" & Me.Controls(i).Name & "/" & Me.Controls(i).Value & "/" & Me.Controls(i).OldValue & "/" & Me.Controls("txt_ID_client_site").Value
        'MsgBox IsNull(Me.Controls(i).Value)
        sql = "INSERT INTO T4_historique (id_enrg, nom_champ, old_value, new_value, date_heure, trigramme)"
        sql = sql + " VALUES (" & Me.Controls("txt_ID_client_site").Value & ", '" & Me.Controls(i).ControlSource & "', '" & Me.Controls(i).OldValue & "', '" & Me.Controls(i).Value & "', #" & Now & "#, '" & recUser.Fields(2) & "');"
        DoCmd.RunSQL sql 'execute la commande SQL
    End If
End If
Next
DoCmd.SetWarnings True 'active message d'alerte
Set recUser = Nothing 'cloture requete
End Sub
A voir également:

2 réponses

platypus69 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   7
 
J'ai trouvé la solution, il suffit de faire un IIF


If IIf(IsNull(Me.Controls(i).Value), "", Me.Controls(i).Value) <> IIf(IsNull(Me.Controls(i).OldValue), "", Me.Controls(i).OldValue) Then
0
tessel75
 
Bonsoir,
Chacun fait comme il veut..., mais il me semble qu'il existe suffisamment de propriétés-évènements dans les formulaires pour trouver de quoi satisfaire ce qu'on cherche.
Ta méthode me parait bien compliquée pour pas grand-chose. Mais au point où tu en est je te proposerais un truc du genre:.
Après Mise à jour, ou sur Sortie, ==> If (Champ_A.OldValue & Champ_B.OldValue & etc.OldValue <> Champ_A.CurrentValue & Champ_B.CurrentValue & etc.CurrentValue ) then EnregistrementModification.
Autrement dit, si concaténation des anciennes valeurs des champs <> concaténation des nouvelles valeurs alors enregistrement. Il suffit qu'une seule valeur soit modifiée pour que la concaténation soit également modifiée.
Mais en principe avec "Sur MàJ" devrait suffire.
Bonne suite
0