+ Répondre à la discussion Actualité déjà publiée
  1. #1
    Rédacteur

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    octobre 2004
    Messages
    9 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 502
    Points : 32 138
    Points
    32 138

    Par défaut 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
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    février 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : février 2013
    Messages : 32
    Points : 24
    Points
    24

    Par défaut 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
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    février 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : février 2013
    Messages : 32
    Points : 24
    Points
    24

    Par défaut

    Toujours pas de solution... Je vais bien finir par trouver!

  4. #4
    Membre à l'essai
    Profil pro
    Enseignant
    Inscrit en
    décembre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2010
    Messages : 15
    Points : 11
    Points
    11

    Par défaut

    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
    Futur Membre du Club
    Homme Profil pro
    Vba
    Inscrit en
    février 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Vba
    Secteur : Industrie

    Informations forums :
    Inscription : février 2011
    Messages : 2
    Points : 9
    Points
    9

    Par défaut

    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
    Homme Profil pro
    Inscrit en
    mars 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2010
    Messages : 31
    Points : 23
    Points
    23

    Par défaut

    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
    Homme Profil pro
    Inscrit en
    mars 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2010
    Messages : 31
    Points : 23
    Points
    23

    Par défaut

    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
    Nom : Log multiplié.jpg
Affichages : 912
Taille : 145,8 Ko

    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
    Nom : requete.jpg
Affichages : 820
Taille : 59,9 Ko

    si quelqu'un pouvait m'aider

    merci

  8. #8
    Candidat au Club
    Inscrit en
    novembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : novembre 2006
    Messages : 7
    Points : 4
    Points
    4

    Par défaut 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

Discussions similaires

  1. [PHP-JS] Gérer évènement dans une base de données
    Par drogba72 dans le forum Syntaxe
    Réponses: 21
    Dernier message: 25/02/2009, 15h31
  2. Réponses: 2
    Dernier message: 02/11/2007, 18h12
  3. Ajouter des éléments dans une base de données Access
    Par bidule123456 dans le forum ASP
    Réponses: 74
    Dernier message: 07/09/2007, 14h00
  4. Réponses: 6
    Dernier message: 18/07/2006, 20h32
  5. Réponses: 3
    Dernier message: 01/07/2006, 11h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo