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 :

Eviter la fermeture intempestive d'une base ACCESS


Sujet :

Access

  1. #1
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2015
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2015
    Messages : 146
    Points : 274
    Points
    274
    Par défaut Eviter la fermeture intempestive d'une base ACCESS
    Bonjour,
    Je cherche comment éviter ou maîtriser la fermeture intempestive d’une basse ACCESS lorsqu’elle est commandée par l’utilisateur via le bouton « fermer » de la barre de titre. J’ai prévu une fermeture via un bouton spécial qui réalise automatiquement une sauvegarde et je ne souhaite pas que l’on sorte de la base par un autre moyen (sauf Alt F4 que je ne saurais peut-être pas « piéger »).
    Il s’agirait, soit de masque le bouton « fermer », soit d’exécuter une procédure personnalisée en cas de clic sur ce bouton.
    Merci d’avance.

  2. #2
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 871
    Points : 3 457
    Points
    3 457
    Par défaut
    Bonjour Claude40,

    Si ta question est de désactiver le X en haut à droite d'Access, la réponse est dans un module :
    Code : 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
    Option Compare Database
    Option Explicit
     
    Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
     
    Public Const SC_CLOSE = &HF060&
    Public Const MF_BYCOMMAND = &H0&
     
    Public Sub DesacFermeture()
     
        Dim hSysMenu As Long
     
        hSysMenu = GetSystemMenu(Application.hWndAccessApp, False)
        RemoveMenu hSysMenu, SC_CLOSE, MF_BYCOMMAND
     
    End Sub
    Tu appelles cette routine lors de l'ouverture de ton application.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  3. #3
    Membre éclairé
    Avatar de Didier L
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 503
    Points : 806
    Points
    806
    Par défaut
    Bonsoir,

    Une autre solution est d'avoir un formulaire de "fond" toujours ouvert.
    Sur libération de ce formulaire tu peux tester une variable globale afin de savoir si tu est passé ou non par ton bouton, et ainsi refuser la fermeture du formulaire et donc de ta base.
    Même le "Alt F4" ne pourra fermer ta base.
    Seul le kill du processus en cas de mauvaise programmation pourra fermer Access.

    Le code de ton bouton pourra être le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Fermer_Click()
    vbFermerOk=True
    docmd.quit
    Et le code sur ton formulaire de fond sera du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Form_Unload(Cancel As Integer)
        If Not vbfermerOk Then
            Cancel = True
        End If
    End Sub
    ou pour les puristes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_Unload(Cancel As Integer)
        Cancel = Not vbfermerOk
    End Sub
    vbfermerOk étant une variable boolean globale déclarée dans un module
    @+


    Pensez au tag

  4. #4
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2015
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2015
    Messages : 146
    Points : 274
    Points
    274
    Par défaut Merci de vos réponses
    Bonjour,
    J'ai testé les deux et elles fonctionnent.
    Mais il a fallu adapter la proposition de Robert car la fonction GetsystemMenu n'était pas déclarée et les constantes ne pouvaient pas être déclarées en "PUBLIC".
    Je vais tâcher de bien cliquer le bouton "Résolu", car je me suis fais sermoner la dernière fois et j'ai un mauvais point dans mes statistiques !
    Dur dur d'évoluer chez les "pros" quand on n'est qu'un amateur (éclairé j'espère !).

  5. #5
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 871
    Points : 3 457
    Points
    3 457
    Par défaut
    Bonjour Claude40, Didier L,

    Erreur de ma part dans le copier/coller pour la fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
    Pour les contantes ça devrait fonctionner en public si tu es dans un module standard, je suis un peu surpris. J'ai plusieurs applications qui fonctionnent avec ce module et tout baigne...

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  6. #6
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2015
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2015
    Messages : 146
    Points : 274
    Points
    274
    Par défaut
    Bonsoir Robert,
    Pour la déclaration de la fonction GetSystemMenu, j'avais complété.
    Pour les constantes effectivement, dans un module standard, ça marche en "PUBLIC". Mais j'avais placé le code sur l'événement "sur ouverture" d'un formulaire qui initialise des variables au début de l'application et non dans un module.
    Voilà, tout est expliqué et doublement résolu.
    Merci encore.

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

Discussions similaires

  1. [AC-2010] Fermeture d'une base access
    Par jawed dans le forum Access
    Réponses: 4
    Dernier message: 23/03/2014, 17h28
  2. [Débutant] Eviter les doublons dans une base access
    Par gilles_906 dans le forum VB.NET
    Réponses: 24
    Dernier message: 29/08/2011, 16h46
  3. Logger l'heure de fermeture d'une base Access
    Par cakeke dans le forum VBA Access
    Réponses: 3
    Dernier message: 27/08/2007, 14h36
  4. bug dans une base Access
    Par bizouard dans le forum Access
    Réponses: 5
    Dernier message: 29/12/2003, 12h41
  5. [ODBC] Intranet en PHP : Lister les tables d'une base Access
    Par fblouet dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/10/2003, 14h46

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