Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Expert éminent sénior
    Création d'un journal d'évènements dans une base de données Access 2010
    Bonjour à tous

    A travers un nouveau tutoriel, je vous propose un exemple d'application d'une des nouvelles fonctionnalités d'Access 2010 : les évènements de table.

    Création d'un journal d'évènements sous Access 2010

    La création d'un journal dans une base Access a toujours été une question récurrente sur les forums. Le premier obstacle rencontré jusqu'à Access 2010 était l'absence de trigger (déclencheur) sur les tables. Comment enregistrer le fait qu'une information ait été modifiée si aucun mécanisme ne signale ce changement ? Deuxième obstacle : la taille du journal. Avec une base de petite taille mais où les accès en écriture sont nombreux, le fichier journal atteint vite un volume monstrueux nécessitant une purge manuelle ou la mise en place d'un système de surveillance chargé de vider régulièrement les historiques obsolètes. Bien entendu, être obligé de coder un espion sur un autre est peu attractif. Heureusement, avec l'arrivée des évènements de tables que l'on peut aussi appeler déclencheurs ou trigger (à l'instar des SGBD plus robustes), Microsoft Access 2010 enfonce encore un peu plus le clou de l'application professionnelle.

    ...
    Merci de laisser ici vos commentaires / remarques / questions

    Bonne lecture

  2. #2
    Membre à l'essai
    Comment ajouter le nom de l'auteur de la modif?
    Bonjour,

    J'ai utilisé ce principe pour faire un journal d'évènements. Je souhaite ajouter le nom de l'auteur de la modification (en prenant le login de connexion).

    Comment peut-on ajouter ce paramètre dans le journal des évènements?

    Merci.

  3. #3
    Membre à l'essai
    Toujours pas de solution... Je vais bien finir par trouver!

  4. #4
    Membre à l'essai
    Bonjour,

    article très intéressant !!

    Néanmoins, je vois que le nom de la table est en dur dans le code :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    SetField
        Name : TableEvenement
        Value: "Clients"


    N'y a-t-i pas moyen de récupérer ce nom pour traiter toutes les tables de la même façon ?
    J'ai beau chercher, je ne trouve pas de mon côté.

    Eric.

  5. #5
    Membre à l'essai
    Citation Envoyé par Doutrick Voir le message
    Bonjour,

    J'ai utilisé ce principe pour faire un journal d'évènements. Je souhaite ajouter le nom de l'auteur de la modification (en prenant le login de connexion).

    Comment peut-on ajouter ce paramètre dans le journal des évènements?

    Merci.
    Bonjour,

    J'ai peut-être une solution pour récuprérer l'auteur de la modification si celui-ci correspond au login du PC, c'est d'utiliser une fonction système environ() dans une fonction public par exemple UserModif(). Puis dans la macro incorporée Après MAJ de la table il suffit de faire DéfinirChamp Nom = NomDeVotreChamp et Valeur = UserModif()

    si dessous la fonction UserModif()

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    '----------------------------------------------------------------------------------------------------------------------'
    Public Function UserModif() As String
    '----------------------------------------------------------------------------------------------------------------------'
    'Récupération du login avec la fonction Environ()
    UserModif = Environ("USERNAME")
    End Function


    Si cela répond à vos besoins, bonne utilisation

  6. #6
    Membre à l'essai
    Citation Envoyé par Tofalu Voir le message
    Bonjour à tous

    A travers un nouveau tutoriel, je vous propose un exemple d'application d'une des nouvelles fonctionnalités d'Access 2010 : les évènements de table.

    Création d'un journal d'évènements sous Access 2010


    Merci de laisser ici vos commentaires / remarques / questions

    Bonne lecture
    Exactement ce que je cherchais
    merci

    EDIT : j'ai un problème de déclaration de modification dans la Table "Evenement" lorsque je passe le "SetLocalVar" du point III-B dans le bloc CreateRecord.
    si je le sorts du bloc, pour le mettre juste en dessous, là j'ai toutes les modifications qui sont renseignées dans la Table "Evenement"
    De plus, je n'ai aucun détail qui est renseigné.
    La casse est elle imoprtante car dans votre article, la variable "IDEvenement" est également écrit "Idevenement".
    Les macros tiennent elles compte de la casse ?
    merci pour votre aide.
    Si quelqu'un aurait une base déja toute faite avec ce journal d'évenement ce serait parfait pour m'en servir comme base d'exemple.
    Là j'en demande bcp...

  7. #7
    Membre à l'essai
    Bonjour,
    je viens de voir la mise a jour.
    entre la première version et celle ci, il y a une différence a ce chapitre : III-A
    "La syntaxe demande un peu de rigueur notamment en ce qui concerne la portée des membres. Dans le premier
    SetField, la valeur [ID] en remplacement de [Clients].[ID] aurait levé une erreur dans la table USysApplicationLog
    car le moteur s'attend à recevoir un champ de l'enregistrement RecordEvenement. Une autre solution serait de
    passer par une variable locale dans la racine de la DataMacro :......."

    Sur le premier TUTO vous définissiez la Variable Local en [ID] sur ce Tuto vous l'indiquez en [Clients].[ID]
    DéfinirVarLocale
    Nom varIdClient
    Exp =[Clients].[Id]

    et ce code ne change plus jusqu'à la fin.
    Est-ce une erreur et faut il effectivement garder :
    SetLocalVar
    Name : varIDClient
    Expr : [ID]

    ?
    Par avance merci

    De plus, je me sert de ce journal pour me l'afficher sur un Tableau de Bord avec la possibilité de voir l'historique des modifications. (voir copie écran joint)
    Lorsque je vais modifier plusieurs champs dans mon enregistrement (comme ici les deux champs avec IDDetailEvenement 40 et 41) et il me multiplier les lignes affichées (Voir IDEvenement). Je pense qu'il faut un petit SELECT DISTINCT quelque part dans mon sql mais je ne sais où le mettre


    j'ai créé un Formulaire directement de la Table Evenement, avec comme source (dans la feuille de propirété)
    SELECT Evenement.*, DetailEvenement.ChampDetailEvenement FROM Evenement INNER JOIN DetailEvenement ON Evenement.IDEvenement = DetailEvenement.IDEvenement;

    Ce qui me donne dans le tgénérateur de requêtes cet affichage


    si quelqu'un pouvait m'aider

    merci

  8. #8
    Futur Membre du Club
    Erreur -20338
    Bonjour,

    Je (débutant access) continue sur le sujet et je pense que mon erreur est proche des soucis décrits dans ce poste.

    La Table Evenement fonctionne bien, mais la table DetailEvenement ne se remplie pas.
    Toujours au sujet de journal d'évènements, j'ai un souci. Message USysApplicationLog: Tbl_dossier.AfterUpdate - -20338 - Execution - macro - Un argument de la fonction de mise à jour n’est pas valide. Le nom du champ doit être fourni comme valeur de chaîne entre guillemets.
    Tbldossier est la table équivalent à Clients de votre exemple.


    Je n'arrive pas à trouver l'erreur et je me dis que ce n'est pas loin. voici le code XML (désolé je ne sais pas comment insérer avec plusieurs lignes):

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    <?xml version="1.0" encoding="UTF-16" standalone="no"?><DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application">
    <DataMacro Event="AfterUpdate"><Statements><Action Name="SetLocalVar"><Argument Name="Name">varIdDossier</Argument><Argument Name="Value">[Tbl_dossier].[ID_dossier]</Argument></Action><CreateRecord><Data Alias="RecordEvenement"><Reference>Evenement</Reference></Data><Statements><Action Name="SetField"><Argument Name="Field">EnregistrementEvenement</Argument><Argument Name="Value">[varIdDossier]</Argument></Action><Action Name="SetField"><Argument Name="Field">TableEvenement</Argument><Argument Name="Value">"Tbl_dossier"</Argument></Action><Action Name="SetField"><Argument Name="Field">TypeEvenement</Argument><Argument Name="Value">"UPDATE"</Argument></Action><Action Name="SetLocalVar"><Argument Name="Name">varIDEvenement</Argument><Argument Name="Value">[LastCreateRecordIdentity]</Argument></Action></Statements></CreateRecord><Action Name="RunDataMacro"><Argument Name="MacroName">Tbl_dossier.md_evenements</Argument><Parameters><Parameter Name="pNomChamp" Value=""Nom_membre""/><Parameter Name="pAncienneValeur" Value="[Old].[Nom_membre]"/><Parameter Name="pNouvelleValeur" Value="[Tbl_dossier].[Nom_membre]"/><Parameter Name="pID" Value="[varIDEvenement]"/></Parameters></Action><Action Name="RunDataMacro"><Argument Name="MacroName">Tbl_dossier.md_evenements</Argument><Parameters><Parameter Name="pNomChamp" Value=""Prenom_membre""/><Parameter Name="pAncienneValeur" Value="[Old].[Prenom_membre]"/><Parameter Name="pNouvelleValeur" Value="[Tbl_dossier].[Prenom_membre]"/><Parameter Name="pID" Value="[varIDEvenement]"/></Parameters></Action><Action Name="RunDataMacro"><Argument Name="MacroName">Tbl_dossier.md_evenements</Argument><Parameters><Parameter Name="pNomChamp" Value=""Adresse_membre""/><Parameter Name="pAncienneValeur" Value="[Old].[Adresse_membre]"/><Parameter Name="pNouvelleValeur" Value="[Tbl_dossier].[Adresse_membre]"/><Parameter Name="pID" Value="[varIDEvenement]"/></Parameters></Action><Action Name="RunDataMacro"><Argument Name="MacroName">Tbl_dossier.md_evenements</Argument><Parameters><Parameter Name="pNomChamp" Value=""ID_Employeur""/><Parameter Name="pAncienneValeur" Value="[Old].[ID_Employeur]"/><Parameter Name="pNouvelleValeur" Value="[Tbl_dossier].[ID_Employeur]"/><Parameter Name="pID" Value="[varIDEvenement]"/></Parameters></Action><Action Name="RunDataMacro"><Argument Name="MacroName">Tbl_dossier.md_evenements</Argument><Parameters><Parameter Name="pNomChamp" Value=""ID_secretaire""/><Parameter Name="pAncienneValeur" Value="[Old].[ID_secretaire]"/><Parameter Name="pNouvelleValeur" Value="[Tbl_dossier].[ID_secretaire]"/><Parameter Name="pID" Value="[varIDEvenement]"/></Parameters></Action></Statements></DataMacro></DataMacros>


    Merci pour votre aide

    Bonne continuation

###raw>template_hook.ano_emploi###