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

IHM Discussion :

Double click ! [AC-2019]


Sujet :

IHM

  1. #1
    Membre habitué
    Avatar de Jsiorat
    Homme Profil pro
    RETRAITE
    Inscrit en
    Juillet 2005
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : RETRAITE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 398
    Points : 169
    Points
    169
    Par défaut Double click !
    Bonjour à toutes et tous

    Question primordiale : Comment empêcher une double instance (ou plus !) d'une base de données dû à deux fois un clic sur l'icône (de raccourci), sur un même poste de travail
    en lien avec la dite base de donnée ?
    Que Access soit en double instance sur un poste ne pose pas de problème, mais qu'il y ait deux instances d'Access et deux instances d'une même base de données sur un même poste et au même instant risque de poser des problèmes de maintenance des données.
    Un grand merci pour vos réponses.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Bonjour.

    Hum étrange, je n'ai jamais eu cela.

    Pour le reste, si tu sépares ton appli en 2 comme recommandé : une frontale (partie interface et code) et une dorsale (table et relation).
    Tu peux ouvrir la frontale autant de fois que tu veux, toutes tes instances vont partager les même données (dorsale) donc pas de problème à priori.

    A+

  3. #3
    Membre habitué
    Avatar de Jsiorat
    Homme Profil pro
    RETRAITE
    Inscrit en
    Juillet 2005
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : RETRAITE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 398
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Bonjour.

    Hum étrange, je n'ai jamais eu cela.

    A+
    Bonjour, je vais essayer d'être plus explicite :
    J'ai déjà mon application en frontale et en dorsale ! j'ai fais un raccourci de la frontale sur mon bureau.
    Il m'ait arrivé de cliquer 2 fois (pas un double clic !) par inadvertance, sur ce raccourci ; résultat : la frontale s'ouvre deux fois ce que j'aimerais éviter !
    Est-il possible, par code vba, de contrôler que l'application ne soit pas déjà ouverte et de refermer l'une des deux instances (je pense à la 1ère ouverte)
    J'imagine une table Paramètre avec un contrôle VraiFaux, mais il y a peut-être plus simple d’où ma question.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Bonjour.

    Tu pourrais mettre un "sémaphore" (un champ EstChargee Booleen) dans une table dans ta dorsale. Quand tu te connectes tu le mets à Vrai et quand tu sors tu le mets à Faux.
    Le problème des sémaphores c'est quand il faut les nettoyer. Si jamais ton appli plante et sort directement le sémaphore va rester à Vrai et tu ne pourras plus te connecter.
    Il y a bien le fichier .accdl qui indique qu'une BD est utilisée mais là encore en cas de sortie anormale ce fichier reste là même si il n'y a plus personne dans la BD et il se recrée dés que tu te connectes.
    Pour info si tu veux t'en servir il faut le lire et déterminer combien de personnes sont connectées (c'est un fichier texte lisible avec n'importe quel éditeur).
    Tu peux prévoir un "super-User" qui lui peut se connecter tout le temps, juste ne pas tester le sémaphore pour lui, mais c'est contraignant, si jamais ton super-utilisateur n'est pas là, tout le monde est enfermé dehors.

    Personnellement avec une architecture Frontale/Dorsale ce qui fait qu'il n'y aucun danger pour les données, je n'essaierai même pas et je dirai juste à mes utilisateurs d'être patients et de ne pas cliquer comme des fous.

    A+

  5. #5
    Membre habitué
    Avatar de Jsiorat
    Homme Profil pro
    RETRAITE
    Inscrit en
    Juillet 2005
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : RETRAITE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 398
    Points : 169
    Points
    169
    Par défaut
    Salut,
    Tu rejoins ma pensée en utilisant le terme "sémaphore" ! Chez moi, c'est "table PARAMETRE".
    Je vois que nous sommes sur la même longueur d'ondes.
    Je vais mettre au point ce système de sémaphore.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Alors n'oublie surtout pas d'inclure un moyen de passer outre sémaphore car sinon tes utilisateurs pourraient bien ne plus pouvoir se connecter.

    Et pour manipuler le sémaphore ne pas oublier qu'il faut être en mode "exclusif".

    Le processus est le suivant :
    lire le sémaphore.
    Si le sémaphore dit que personne n'est connecté.
    Verrouiller l'enregistrement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    r.edit
    r![Semaphore]=True
    r.update
    Il faut inclure une gestion d'erreur pour que si un autre utilisateur arrive en même temps il soit bloquer le temps que la mise à jour du sémaphore soit fait.

    Et je réalise que tu vas avoir un problème pour distinguer une double ouverture sur le même poste de 2 ouvertures sur 2 postes différents.
    Finalement une liste des utilisateurs serait mieux, si l'utilisateur est dans la liste tu empêches la connexion.
    Il faut toujours gérer le retrait mais tu as moins de risque que tous tes utilisateurs soient bloqués.

    A+

  7. #7
    Membre habitué
    Avatar de Jsiorat
    Homme Profil pro
    RETRAITE
    Inscrit en
    Juillet 2005
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : RETRAITE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 398
    Points : 169
    Points
    169
    Par défaut ça fonctionne ...
    Bonjour,

    Voilà comment ça fonctionne .... c'est pour une application bureau dont j'ai renommé l'extension de .accbd en .accbr
    - une table [tParam] ; avec un champ Oui/Non nommé [BdDOpen] ; dans la BdD frontale (les autres tables étant liées)
    - un petit module avec la fonction
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Function OpenBdD()
    Dim db As Database
    Dim rs As Recordset
     
    Set db = CurrentDb
    Set rs = db.OpenRecordset("tParam")
     
    With rs
      If .Fields![BdDOPEN] = True Then
        MsgBox "La base de données est déjà opérationnelle !", vbCritical + vbOKOnly, "BIBLIOTHÈQUE"
        Application.Quit
      Else
        .Edit
        .Fields![BdDOPEN] = True
        .Update
      End If
    End With
     
    Set rs = Nothing
    Set db = Nothing
     
    End Function

    - une macro "Autoexec" qui appelle cette fonction
    - sur le bouton qui va sortir de la base de données, ajouter le code :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Private Sub cmdQuitter_Click()
    Dim db As Database
    Dim rs As Recordset
     
    Set db = CurrentDb
    Set rs = db.OpenRecordset("tParam")
     
    With rs
        .Edit
        .Fields![BdDOPEN] = False
        .Update
    End With
    Set rs = Nothing
    Set db = Nothing
     
       Application.Quit
    End Sub

    Si il y a un incident quelconque qui bloque le champ [BdDOpen] sur OUI, il faut utiliser la touche Shift pour accéder à la BdD et atteindre le champ pour le passer à NON

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

Discussions similaires

  1. [VB.NET] DataGrid et double click
    Par mic56 dans le forum Windows Forms
    Réponses: 15
    Dernier message: 01/11/2006, 04h37
  2. [JTree] Empecher le double-click
    Par filpinpin dans le forum Composants
    Réponses: 6
    Dernier message: 13/05/2005, 13h45
  3. Question sur double click
    Par cjacquel dans le forum MFC
    Réponses: 2
    Dernier message: 30/04/2005, 11h53
  4. [C#] [WinForms] Double click ListBox
    Par fxp17 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/04/2005, 14h58
  5. OnMouseUp et double click
    Par DBBB dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/12/2004, 16h02

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