none
Event généré par modification DB Access RRS feed

  • Question

  • Bonjour,

    Je dois développer un outil qui doit vérifier si une DB Access a été modifiée.

    Je pense que faire des queries toutes les secondes n'est pas très efficient pour la performance.

    Je me demande donc si MS Access expose des événements (events) via une interface COM/DCOM dont je pourrais me servir en cas de changement dans la DB. Peut-être puis-je être averti des modifications de Access par le namespace System.Data.OleDb. Selon moi c'est la meilleure solution.

    Pour info, je développe mon projet en C#.

    Merci pour votre réponse,

    Bruno
    mercredi 18 février 2009 14:44

Réponses

  • Argyronet,

    Merci pour cette réponse très détaillée.

    Dans votre outil, je suppose que vous utilisez la classe FileSystemWatcher pour voir si le fichier *.ldb a été créé.

    Afin de pouvoir détecter les changements dans la BDD, j'ai utilisé cette classe et cela marche sans problème:

    public void Initialize() 
          FileSystemWatcher fsw = new FileSystemWatcher("Chemin_du_folder_BDD""Nom_BDD.mdb"); 
          fsw.EnableRaisingEvents = true
          fsw.Changed += fsw_Changed; 
     
    void fsw_Changed(object sender, FileSystemEventArgs e) 
         //Do something 
    Je ne sais pas si c'est la meilleure façon mais s'en est une qui fonctionne.

    Merci pour votre aide,

    Bruno



    • Marqué comme réponse Bruuuunoooo mercredi 25 février 2009 10:24
    mercredi 25 février 2009 10:18

Toutes les réponses

  •  

    Bonjour,

     

    J'ai développé cet outil pour les administrateurs de BDD Access et pour les développeurs.

    Ce dernier ne permet pas de savoir si une base a été modifiée mais de savoir si quelqu'un y est connecté en temps réel...

     

    Je sais que dans la technologie que vous utilisez, il existe une méthode pour connaître les changements dans un dossier cible ce qui se traduit pour le cas en cours par la création, la modification ou la suppression du fameux fichier LDB.

    Je n'ai plus la nom en tête...

     

    Pour info, il me semble délicat d'envisager l'usage des événements tel que vous le percevez ne peut pas être fiable à 100%.

    Dans ce sens, par une simple procédure utilisant OLE Automation, il est possible d'intervenir dans une table sans qu'aucun événement ne soit déclenché donc impossible de savoir si une modification à été effectuée.

     

    Si vous êtes certain que les utilisateurs sont contraints de passer par un MDE (Frontal) et que la BDD (Dorsale) n'est pas accessible par aucun autre moyen que par l'application, il est alors judicieux d'envisager la mise en place d'un champ horodaté ce qui vous permettrait de savoir quels enregistrement ont été touchés ; pour cela, je peux vous inviter à lire ce tutoriel qui sera une piste intéressante pour stocker les éventuels changements apportés sur la base.

      


    Argy
    mercredi 25 février 2009 09:41
    Modérateur
  • Argyronet,

    Merci pour cette réponse très détaillée.

    Dans votre outil, je suppose que vous utilisez la classe FileSystemWatcher pour voir si le fichier *.ldb a été créé.

    Afin de pouvoir détecter les changements dans la BDD, j'ai utilisé cette classe et cela marche sans problème:

    public void Initialize() 
          FileSystemWatcher fsw = new FileSystemWatcher("Chemin_du_folder_BDD""Nom_BDD.mdb"); 
          fsw.EnableRaisingEvents = true
          fsw.Changed += fsw_Changed; 
     
    void fsw_Changed(object sender, FileSystemEventArgs e) 
         //Do something 
    Je ne sais pas si c'est la meilleure façon mais s'en est une qui fonctionne.

    Merci pour votre aide,

    Bruno



    • Marqué comme réponse Bruuuunoooo mercredi 25 février 2009 10:24
    mercredi 25 février 2009 10:18
  • Ah, voilà, c'est ce nom là que j'avais oublié, le FileSystemWatcher...
    Non, pas du tout.
    J'utilise un jeu d'API dédiées aux bases Access et développée par Microsoft pour la circonstance bien avant l'existence de la techno .Net et donc de ce FileSystemWatcher.

    Non, ce n'est pas la meilleure façon, c'est une bonne solution, c'est tout, mais pour du Access, c'est déjà top...
    En fait, même si le LDB n'est parfois pas supprimé (cas de plantâge de la base) il voit ses attributs de toute façon affectés dès que la base est accédée de nouveau.

    Regardez quand même le Tuto, c'est une bonne piste pour savoir ce qui a été modifié et par qui (pas mal d'adaptations sont à prévoir, qui plus est en C#).

    Bonne journée...
    Argy
    mercredi 25 février 2009 10:40
    Modérateur