Tracer changement données

Résolu/Fermé
platypus69 Messages postés 108 Date d'inscription mardi 24 février 2009 Statut Membre Dernière intervention 11 février 2015 - Modifié par platypus69 le 7/05/2014 à 12:52
 tessel75 - 8 mai 2014 à 02:03
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 mardi 24 février 2009 Statut Membre Dernière intervention 11 février 2015 7
7 mai 2014 à 12:54
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
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