IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Access Discussion :

QUI est en train de modifier le même enregistrement que moi ? [AC-2010]


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    logisticien
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : logisticien
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Points : 17
    Points
    17
    Par défaut QUI est en train de modifier le même enregistrement que moi ?
    Bonjour
    J'ai développé une base Access et il m'arrive lors d'une modification d'un enregistrement , de recevoir le message suivant :

    ***************** "Impossible d'enregistrer car la ressource est actuellement verrouillée par un autre utilisateur" ****************

    Ce n'est pas un souci en soi (au contraire, j'attends quelques minutes et je refais une tentative) , sauf ...lorsque la personne en question est partie pour des heures !

    Mon souhait ; l'identifier pour pouvoir l'appeler et lui demander de sortir ou (au pire) la déconnecter à distance.

    Nous utilisons SAP et dans ce logiciel, dans un cas similaire, il nous donne l'identification de la personne avec laquelle nous sommes "en conflit" (au travers de son matricule usine)

    Dans Access, je sais récupérer dans un table le nom de la personne qui a modifié l'enregistrement d'un formulaire (selon la méthode suivante ...)

    * dans un module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function GetUserName() As String
     GetUserName = Environ("Username")
    End Function
    * dans le formulaire sur l'évènement "avant modification" => mise à jour d'un champs prévu à cet effet avec la fonction GetUserName définie plus tôt dans le module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Me.LU.Value = GetUserName()
    end sub
    Mais ceci ne règle pas le problème, QUI est le USER qui a EFFECTIVEMENT LA MAIN (et qui n'est pas lié lui à un évènement sur MA cession) ?

    Si quelqu'un a déjà développé pareille fonction, son aide me serait des plus utiles, merci d'avance !

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,
    Une solution: utiliser une table tUsers où à l'ouverture de l'application le nom de l'utilisateur et la date/heure sont enregistrés, puis idem enregistrement date/heure à la fermeture de l'application. S'il s'agit d'un nouvel utilisateur, il peut lui être demandé d'indiquer son email ou son n° de téléphone!
    Bonne continuation

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 265
    Points
    34 265
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    Membre à l'essai
    Homme Profil pro
    logisticien
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : logisticien
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Points : 17
    Points
    17
    Par défaut plus complexe que prévu malheureusement...
    Bonjour Messieurs
    Sincères remerciements pour vos réponses.
    Pour faire ma maintenance hebdomadaire, j'ai besoin d'avoir l'accès en exclusivité sur la base de données. J'ai donc bidouillé un code pour "sortir" les utilisateurs d'office (avec message les prévenant, timer etc.)
    Cela fonctionne dans la grande majorité des cas. Si ce n'est pas le cas, j'utilise l'utilitaire dont parle Jean-Philippe ANDRE :
    http://argyronet.developpez.com/down...ols/mdbviewer/
    Dans mon entreprise cet utilitaire renvoie le nom de (tous les) l'ordinateur(s) connecté(s), l'utilisateur quel qu'il soit apparaît sous le nom "Admin", ce qui m'a fait développer un bout de code pour que chaque fois qu'un matricule entreprise se connecte sur ma base, j'enregistre son ordinateur. Ainsi grâce à l'utilitaire, je connais l'ordinateur donc la personne que je peux appeler pour qu'elle se déconnecte manuellement (puisque informatiquement je n'y arrive pas)
    Cette solution c'est ce que j'appelle "la dissuasion nucléaire", à un instant "T", l'administrateur a besoin des droits exclusifs , il vire tout le monde, il a plein pouvoir pour assurer sa maintenance.

    Le cas que je souhaite aborder est beaucoup plus subtil. Il y a 35 personnes connectées (exemple), l'une d'elle par une modification d'enregistrement en cours en bloque une autre qui souhaite aussi intervenir sur cette ligne particulière d'une table.

    il faudrait qu'au lieu d'avoir le message
    ***** "Impossible d'enregistrer car la ressource est actuellement verrouillée par un autre utilisateur" *****

    il y ait un message
    ***** "Impossible d'enregistrer car ce même enregistrement est en cours de modification par : Matricule (ou ordinateur ou nom etc...)" *****

    Comme je vous l'ai dit, c'est ce qui existe dans SAP (certes 1er ERP mondial me semble-t-il), si quelqu'un s'oublie sur un panneau (il y en a des milliers ) et bloque tous les autres (des milliers de connectés aussi !) le but n'est pas de virer tous les connectés mais d'identifier pour l'alerter celui qui pose problème.

    Complexe n'est ce pas ? Et pourtant si pratique...
    Salutations.

  5. #5
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Un post (assez ancien) sur ce sujet: Determine if a Record Is Locked and by Whom.
    Cordialement.

  6. #6
    Membre à l'essai
    Homme Profil pro
    logisticien
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : logisticien
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Points : 17
    Points
    17
    Par défaut Génial !
    Merci beaucoup Eric pour avoir su dénicher cette pépite que je vais analyser et tester dès que possible
    Entretemps j'avais commencé à élaborer un début de solution. (purement théorique à ce stade)
    Je sauvegarde déjà le matricule du créateur d'un enregistrement, puis le matricule de celui qui modifie ce même enregistrement (sans garder tous les intervenants toutefois, seulement le dernier qui vient écraser le "modificateur" précédent)
    Problème ce "modificateur" ne s'enregistre que si justement il modifie "pleinement" c'est à dire après l'évènement After_Update.
    M'est venue l'idée de créer un code sur l'évènement Before_Update, ce code aurait pour but de reprendre dans une table à part (appelons la, "EnCoursModifTableX" )la clé de l'enregistrement de la table d'origine plus le matricule de la personne qui a commencé à le toucher.
    Dès lors voici les scenarii possibles :
    La personne 1 va au bout de son enregistrement (évènement After_Update) , je mets un bout de code dans cet évènement qui va supprimer la clé dans la table "EnCoursModifTableX"
    La personne 1 annule sa modification en cours , je mets ce même bout de code qui va supprimer la clé dans la table "EnCoursModifTableX"
    La personne 1 "s'oublie" en cours de modification, la table "EnCoursModifTableX" reprend le numéro d'enregistrement (et le matricule de la personne 1) sur lequel la personne 2 se trouve
    Donc dans l'évènement Before_Update de mon formulaire (qui touche à la TableX) , je fais une recherche sur la table "EnCoursModifTableX"et si je trouve ce même numéro d'enregistrement (et un matricule) je peux afficher un message qui dit à la personne 2 "vous ne pouvez pas enregistrer car le matricule (personne 1 ) est en train de modifier l'enregistrement.
    Il faut compliquer un peu les choses en se disant que si 3 ou 4 personnes modifient toutes en même temps le même enregistrement, ce numéro de clé va se retrouver plusieurs fois dans "EnCoursModifTableX" (mais avec un numéro de matricule différent ! donc tous identifiables)
    Idée à approfondir aussi pourquoi pas.
    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/03/2015, 19h02
  2. Réponses: 0
    Dernier message: 14/11/2014, 16h38
  3. [ZF 1.11] Formulaire ajouter/modifier dans même écran que tableau de données
    Par CinePhil dans le forum Zend_Form
    Réponses: 2
    Dernier message: 04/02/2011, 16h57
  4. Réponses: 0
    Dernier message: 14/01/2011, 22h35
  5. Réponses: 2
    Dernier message: 28/07/2009, 16h24

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