Comment arrêter une application Access personnalisée à distance

Avancé : nécessite des compétences d’experts en codage, en interopérabilité et en multi-utilisateur.

Cet article sʼapplique uniquement à une base de données Microsoft Access (.mdb ou .accdb).

Résumé

Parfois, vous devrez peut-être effectuer des tâches de maintenance sur une base de données Microsoft Access, telles que le compactage ou la réparation, la création de copies de sauvegarde ou la modification de la conception. La plupart de ces opérations nécessitent que tous les utilisateurs quittent la base de données. Toutefois, il n’existe aucun moyen intégré pour forcer les utilisateurs à quitter Microsoft Access. Et il n’est pas judicieux de simplement déconnecter l’utilisateur des solutions réseau. Cela peut endommager la base de données.

Cet article présente une approche que vous pouvez utiliser pour arrêter correctement une application de base de données Access front-end. Vous pouvez également utiliser la plupart de ces concepts pour compacter ou réparer la base de données, effectuer des copies de sauvegarde, etc.

Microsoft fournit des exemples de programmation à titre d’illustration uniquement, sans garantie expresse ou implicite. Cela inclut, sans y être limité, les garanties implicites de commercialisation et d’adaptation à un but en particulier. Cet article considère que vous connaissez le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les techniciens du Support technique Microsoft peuvent vous expliquer les fonctionnalités d’une procédure particulière, mais ils ne peuvent pas modifier les exemples en vue de vous fournir des fonctionnalités supplémentaires ou de créer des procédures répondant à vos besoins spécifiques.

Informations supplémentaires

Fonctionnement de la solution

La solution fonctionne comme suit. Sur un serveur, un fichier se trouve dans un dossier. Ce fichier peut être nommé n’importe quel nom. Pour cette solution, un fichier nommé chkfile.ozx est utilisé. Lorsque ce fichier est renommé ou supprimé, il avertit l’application Access frontale qu’elle doit se fermer.

Un formulaire est généré qui s’ouvre lorsque les utilisateurs démarrent l’application de base de données frontale. Ce formulaire vérifie l’existence du fichier sur le serveur à un intervalle défini. Pour ce faire, il utilise la propriété TimerInterval et l’événement OnTimer.

Si le fichier est trouvé, rien ne se passe. Si le fichier est introuvable, le formulaire affiche un autre formulaire pour avertir l’utilisateur que la base de données sera automatiquement fermée dans un laps de temps spécifié.

Remarque

Cette solution n’utilise pas la fonction MsgBox pour avertir l’utilisateur. La fonction MsgBox attend l’entrée de l’utilisateur avant d’exécuter du code. Cela irait à l’échec de l’objectif de la solution.

Pour fermer correctement les sessions clientes, cette solution renomme le fichier en cours de vérification. Lorsque tout ce qui doit être accompli est terminé, cette solution renomme le fichier en son nom d’origine. Cela permet aux utilisateurs de savoir qu’ils peuvent redémarrer la base de données frontale.

Ce processus peut également être automatisé pour fournir une opération sans assistance à l’aide d’un service planifié sur le serveur qui renomme chkfile.ozx à des heures spécifiées.

Étapes de création d’un exemple de scénario

Pour illustrer le fonctionnement de cette solution, vous devez disposer des éléments suivants :

  • Dossier sur votre disque dur avec le chemin D’accès C :\MyData.
  • Fichier vide. Cette solution case activée la présence de ce fichier.
  • Une conception de base de données fractionnée avec les tables dans un fichier de base de données principal et des liens vers cette table dans la base de données frontale. La base de données frontale contient le code qui vérifie l’existence du fichier à un intervalle défini, puis avertit l’utilisateur.

Création du dossier pour l’exemple d’application

Créez un dossier dans le répertoire racine du lecteur C et nommez-le MyData.

Création du fichier texte vide

  1. Créez un fichier texte dans le dossier MyData et nommez-le chkfile.txt.
  2. Renommez le fichier texte afin qu’il ait une extension ozx (chkfile.ozx). Lorsque vous y êtes invité, vérifiez que vous souhaitez modifier l’extension de fichier.

Création de la base de données principale

  1. Créez une base de données dans le dossier C :\MyData et nommez-la Northwind_Be.mdb.
  2. Importez la table Customers de l’exemple de base de données Northwind dans la base de données Northwind_Be.mdb. (Par défaut, Northwind se trouve dans C :\Program Files\Microsoft Office\Office10\Samples.)
  3. Fermez la base de données.

Création de la base de données frontale

  1. Créez une autre base de données et nommez-la Northwind_Fe.mdb.
  2. Lier la table Customers de la base de données Northwind_Be.mdb à la nouvelle Northwind_Fe.mdb
  3. Créez un formulaire automatique basé sur la table Customers liée et enregistrez-le sous frmCustomers. Fermez ce formulaire.

Création du formulaire avec du code qui vérifie l’existence du fichier

  1. Créez un formulaire indépendant et enregistrez-le sous le nom frmAppShutDown. Dans une base de données de production, ce formulaire est normalement toujours ouvert, mais pas visible. Pour cet exemple, il peut être laissé ouvert comme d’habitude.
  2. Définissez la propriété TimerInterval du formulaire sur 60 000 millisecondes. Cela équivaut à une minute. (Pour votre propre solution, vous pouvez augmenter ou décéder cet intervalle de temps.)
  3. Dans Microsoft Office Access 2003 ou dans les versions antérieures d’Access, en mode Création du formulaire frmAppShutDown, cliquez sur Code dans le menu Affichage . Dans Microsoft Office Access 2007, en mode Création du formulaire frmAppShutDown, cliquez sur l’onglet Création , puis sur Afficher le code dans le groupe Outils . Tapez ou collez le code suivant :
Option Explicit
Dim boolCountDown As Boolean
Dim intCountDownMinutes As Integer

Private Sub Form_Open(Cancel As Integer)
    ' Set Count Down variable to false
    ' on the initial opening of the form.
    boolCountDown = False
End Sub

Private Sub Form_Timer()
On Error GoTo Err_Form_Timer
    Dim strFileName As String
    strFileName = Dir("c:\MyData\chkfile.ozx")
    If boolCountDown = False Then
        ' Do nothing unless the check file is missing.
        If strFileName <> "chkfile.ozx" Then
            ' The check file is not found so 
            ' set the count down variable to true and
            ' number of minutes until this session
            ' of Access will be shut down.
            boolCountDown = True
            intCountDownMinutes = 2
        End If
    Else
        ' Count down variable is true so warn
        ' the user that the application will be shut down
        ' in X number of minutes.  The number of minutes
        ' will be 1 less than the initial value of the
        ' intCountDownMinutes variable because the form timer
        ' event is set to fire every 60 seconds
        intCountDownMinutes = intCountDownMinutes - 1
        DoCmd.OpenForm "frmAppShutDownWarn"
        Forms!frmAppShutDownWarn!txtWarning = "This application will be shut down in approximately " & intCountDownMinutes & " minute(s).  Please save all work."
        If intCountDownMinutes < 1 Then
            ' Shut down Access if the countdown is zero,
            ' saving all work by default.
            Application.Quit acQuitSaveAll
        End If
    End If

Exit_Form_Timer:
    Exit Sub

Err_Form_Timer:
    Resume Next
End Sub

  1. Enregistrez, puis fermez le formulaire.

Création du formulaire qui servira à avertir l’utilisateur

Remarque

N’utilisez pas la fonction MsgBox pour avertir l’utilisateur. La fonction MsgBox attend l’entrée de l’utilisateur avant d’exécuter du code. Cela irait à l’échec de l’objectif de la solution.

  1. Créez un formulaire indépendant et nommez-le frmAppShutDownWarn. Ajoutez le contrôle de zone de texte suivant :

    Name: txtWarning
    Type: Textbox
    
  2. Enregistrez et fermez le formulaire.

  3. Créez une macro qui ouvre le formulaire frmCustomer et le formulaire frmAppShutDown au démarrage. Nommez la macro autoexec.

  4. Fermez et rouvrez la base de données.

  5. Renommez chkfile.ozx en chkfile.old.

Minutage des événements de solution

Remarque

Toutes les heures suivantes sont approximatives et commencent après le changement de nom de chkfile.ozx.

  • Une minute ou moins : Northwind_FE.mdb remarquerez que le fichier en cours de vérification est manquant.
  • Deux minutes : un formulaire est ouvert dans Northwind_FE.mdb, vous informant que la base de données se fermera en une minute.
  • Trois minutes : Northwind_FE.mdb se ferme automatiquement et enregistre tout le travail.