Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
Accueil Access Forum Access F.A.Q Access F.A.Q VBA Tutoriels Sources Outils Livres Access TV Access 2007

Fermeture Automatique d'une Base Access

17 Août 2004

Par Maxence HUBICHE (access-maxence)
 

Comment fermer automatiquement une base Access restée ouverte, à une date, ou une heure donnée ?
Cette question revient très souvent, aussi, j'ai pensé que vous fournir un petit outils exemple, à cet effet ne serait pas négligeable.
Bonne lecture !


1. Concepts de Base
1.1. L'Idée
1.2. Les Outils
2. La table
2.1. La Structure
2.2. Les Trucs et Astuces
3. Le Formulaire
3.1. Le Formulaire
3.2. Les contrôles
3.2.1. La Zone de Texte : txtMessage
3.2.2. L'Onglet : ctlOnglet
4. Comment exécuter cet outils
5. Télécharger la base source ...


1. Concepts de Base



1.1. L'Idée


La question première était : Comment puis-je faire pour fermer automatiquement une base de données, à partir d'un moment précis, par exemple, tous les soir ...

La solution que je préconise ici est assez simple à réaliser. Vous pourrez chercher des adaptations tout aussi simples pour permettre, par exemple, la fermeture automatique de toutes les bases clientes connectée à une base de données placée sur un serveur.

Comment allons-nous nous y prendre ? Nous ne connaissons pas l'heure en cours, si ce n'est en récupérant l'heure système par une fonction. Il faut donc passer son temps à vérifier que l'heure définie comme étant la limite n'est pas atteinte !

Le processus s'effectuera donc comme suit :

  1. Lancement de l'application
  2. Ouverture d'un formulaire en invisible
  3. Vérification de l'horaire à intervalle déterminé
  4. Si l'horaire est dépassé, affichage du formulaire en modal (blocage de l'application) pendant un temps donné
  5. Puis fermeture automatique de la base de données


1.2. Les Outils


Le seul outil simple, et vraiment important dans notre cas, à notre disposition est le formulaire. Il est le seul à posséder une fonction de Timer, et ses capacités d'affichage nous seront d'une grande aide. Nous allons donc avoir besoin :

  • d'une table contenant divers paramètres tels la durée entre deux vérifications, l'heure limite pour la fermeture de la base ;
  • d'un formulaire qui servira à la vérification de l'horaire et à l'affichage de l'information à l'utilisateur ;
  • d'une petite instruction à placer au lancement de l'application pour charger le formulaire... en invisible pour ne pas perturber l'utilisateur.


2. La table



2.1. La Structure


J'ai créé une table nommée tblShutDownParameters
Elle contient les champs suivants :

  • prmID : (Numérique - Octet) ID... s'assure qu'il n'y a qu'une seule ligne par la règle de validation
  • prmShutDownAt : (Date/Heure) Fermeture automatique de la base à ... (heure)
  • prmScannTimer : (Numérique - Entier Long) Nombre de secondes entre chaque vérification
  • prmShowTimer : (Numérique - Entier Long) Nombre de secondes pour afficher le message

Libre à vous de rajouter des champs si vous souhaitez, par exemple, activer/désactiver la fonction de ShutDown, l'automatiser pour certains jours, etc


2.2. Les Trucs et Astuces


Il fallait absolument empêcher qu'il y ait plus d'un enregistrement dans cette table. J'ai donc utilisé une technique amusante :

Le champ prmID est défini avec les propriétés suivantes :

  • Type de données : Numérique
  • Taille : Octet
  • Valeur par défaut : 1
  • Valide si : =1

Ainsi, la valeur entière ne pourra pas être autre chose que 1. Ce champ étant, par ailleurs défini en clé primaire, donc unique (cf le tutoriel sur les jointures) il sera impossible de créer une nouvelle ligne, une fois la ligne d'identifiant 1 créée.

La manipulation de quelques autres propriétés vous permettra d'affiner la saisie de l'utilisateur, comme par exemple ici, pour la saisie du champ prmShowTimer :


3. Le Formulaire


Le formulaire va être l'âme de la solution. Aussi, nous allons détailler sa conception et son usage ci-après :


3.1. Le Formulaire


Le formulaire, dans notre cas, est lié à la table. Ceci n'est pas une obligation, et on pourrait imaginer qu'à chaque vérification de l'heure, il faille rechercher à nouveau les paramètres, afin de s'assurer qu'aucune modification de ces derniers n'existe, notamment dans le cas d'une mise en réseau de la solution.

Afin d'en définir un affichage correct, la plupart des propriétés de l'onglet Format a été modifiée, comme vous pouvez le constater sur l'image suivante :

Pareillement, il a fallu veiller à certains aspects des données du formulaire. Permettre la modification des paramètres, sans pour autant les supprimer ni en ajouter, par exemple. Voici comment je m'y suis pris :

Le formulaire sera défini en Fen. Indépendante et Fen. Modale, afin de bloquer l'usage de l'application à l'utilisateur pendant toute la durée de l'affichage de l'information.

Bien sûr, il faudra faire un peu de code, et nous nous intéresserons maintenant à deux évènement du formulaire :

dont voici le code :

Code de l'évènement d'activation
Private Sub Form_Current() 'Lors de l'activation de l'enregistrement, ' les paramètres par défaut son générés Me.TimerInterval = Me.prmScannTimer * 1000 End Sub
Ce code se lancera automatiquement lorsque l'enregistrement en cours, donc le premier enregistrement, donc le seul est unique possible, au vu de ce que nous avons décis précédemment, s'activera. Il définira automatiquement la valeur de la propriété TimerInterval du formulaire, en fonction de ce que nous aurons prédéfini dans la table, au niveau du champ prmScannTimer.

Code de l'évènement timer
Private Sub Form_Timer() 'ATTENTION : Les infos de la table sont en Secondes ' Les infos attendues en millisecondes. ' Penser à toujours multiplier par 1000 ! ' ' 'Sur le timer ... 'Si l'heure limite est passée ... If TimeValue(Now()) >= TimeValue(Me.prmShutDownAt) Then 'Si l'intervalle a déjà été remis à l'affichage If Me.TimerInterval = Me.prmShowTimer.Value * 1000 Then 'Alors, quitter l'appli Application.Quit 'Sinon, Else 'mettre l'intervalle d'affichage 'Et afficher le formulaire Me.TimerInterval = Me.prmShowTimer.Value * 1000 Me.Visible = True End If 'Sinon, Else 'Rendre de toutes façons le formulaire invisible Me.Visible = False End If End Sub
Ce bout de code est des plus intéressant, car, à chaque fois que le timer - le délai avant prochaine exécution, défini dans la table - est passé cette procédure se lance.

Il commence par tester si l'horaire limite est dépassé, puis la valeur de l'intervalle donné au Timer.

Si l'intervalle du Timer est celui de l'affichage, alors, il ferme l'application.

Sinon, il va afficher le formulaire, sans oublier de modifier la valeur de l'intervalle du Timer afin de définir la durée de l'affichage.


3.2. Les contrôles



3.2.1. La Zone de Texte : txtMessage


Nous avons besoin d'afficher un message à l'utilisateur. Par exemple : "La base va se fermer dans xxx secondes"

Une étiquette serait suffisante, mais, pour pouvoir dynamiquement afficher les secondes définies dans notre table, une Zone de Texte sera préférable. Au niveau de sa propriété Source Contrôle, nous aurons alors un expression telle que :

="La base va se fermer automatiquement dans " & [prmShowTimer] & " secondes"

Personnellement, j'ai fait le choix de mettre ce contrôle dans le premier onglet d'un contrôle Onglet, et de mettre l'ensemble des champs de la table dans le 2ème Onglet.


3.2.2. L'Onglet : ctlOnglet


Vous l'avez compris, nous avons un contrôle Onglet avec 2 pages

Le contrôle onglet contient quelques propriétés très intéressantes comme la possibilité de masquer les onglets, ce que nous utiliserons pour que l'utilisateur ne voie pas nos paramètres. Il s'agit de la propriété Style que vous voyez ici :

Ce contrôle ne sert à rien, dans le cas présent. Cependant, vous pourrez imaginer un moyen de rendre les onglets visibles afin de vous permettre une modification des paramètres ... La solution du masquage des onglets sert énormément dans le cas de la création d'assistant-like, et c'est la raison pour laquelle j'ai souhaité vous la montrer.


4. Comment exécuter cet outils


Pour exécuter cet outils, vous devez soit le réaliser, soit le télécharger dans la rubrique suivante. Si vous choisissez de le télécharger, importez la table et le formulaire dans votre base. A partir de là, vous avez essentiellement 2 solutions : Soit un formulaire de démarrage dans votre application, soit une macro AUTOEXEC, mais de toutes les façons, il faudra lancer automatiquement le formulaire à l'ouverture.


Si vous optez pour la macro AUTOEXEC, ajoutez la commande OuvrirFormulaire, sans oublier de préciser que le Mode Fenêtre est 'Masquée'.

Si la solution VBA vous convient mieux, une ligne comme :

Exemple de code pour le lancement de l'outils
DoCmd.OpenForm "frmShutDownParameters", WindowMode:=acHidden

5. Télécharger la base source ...


Vous pouvez télécharger un exemple zippé de cette base au format Access 97 ici

Pour les versions Access 2000 et ultérieures, vous pouvez télécharger un exemple zippé de cette base ici


Mes tutoriels :
(23/10/04) La notion de Classe de Formulaire Access
(21/08/04) Access - Les Bases : Introduction et Conception
(20/08/04) Fermer automatiquement une base Access
(28/03/04) Comprendre les jointures / Relations dans Access
Mes articles :
(21/06/04) Faut-il Développer en PME (Le Monde Informatique)
(15/03/04) Les Nouveautés Access 2003
Mes sites :
Sur access-maxence
Mon blog
Case Studio (Logiciel de modélisation de données)
En cours de production :
Access - Les Bases : Suite et Fin
Tutoriel sur les Sous-Formulaires
En Projet :
Listing explicatif des fonctions d'Access
Access - Perfectionnement : Exploitation des données
Access - Expert : Interface et automatisation
Access - VBA
Access - VBA : Perfectionnement


Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Responsable bénévole de la rubrique Access : Christophe Lessirard - Contacter par EMail :
Vos questions techniques : forum d'entraide Access - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.