OVH Cloud OVH Cloud

Journalisation des entrées/sorties dans le code

12 réponses
Avatar
Didier Morandi
Bonjour à tous et bonne année,

Je voudrais créer le journal d'exploitation d'une grosse appli dont les auteurs
et le contrôle ont été perdus, et dont je récupère la maintenance.

Afin de savoir un peu ce qui s'y passe, j'ai dans un premier temps ajouté sur
tous les écrans les noms des formulaires et sous-f. Je souhaite maintenant créer
une trace des modules VB exécutés par les différents formulaires.

Etant débutant sur la programmation ACCESS/VB, je suis donc allé à la FNAC et
j'ai acquis le John Viescas (Access 2002 au quotidien), le Greg Perry (VB 6 en
21 jours et un divorce) et *le* F. Scott Barker (programmation Access).

Ebé, je n'y ai trouvé que la possibilité d'écrire des messages d'erreur dans une
table via un error handler (bon, d'accord, je n'ai pas tout lu mais presque :-)
Ce que je voudrais, c'est avoir dans un fichier (avec DoCmd.OutputTo par
exemple) l'état suivant :

type nom routine date/heure
----------+------------+------------------------+--------------------
Formulaire ListeClients Private Sub Form_Load() 31-jan-2004 11:30:01
Formulaire ListeClients Private Sub faitmoiça() 31-jan-2004 11:30:02
Formulaire ListeClients Private Sub Form_Close() 31-jan-2004 11:32:00
etc.

En DCL, le langage de script de VMS, j'aurais fait un truc comme ça :

1. ouvrir un fichier texte au début de l'appli
2. inclure (automatiquement) dans tous les scripts la ligne
$ write FichierLog "Entrée dans ",f$environnement(procedure)," le ", f$time()
3. fermer le fichier en sortie de procédure

f$environnement(procedure) me donne le nom complet du script et son emplacement
f$time() me donne l'quivalent de "Now".

Qu'en pensez-vous ?
Merci.

D.
--
VAXUS - Your new helpful friend in the DEC Family!
EHQ: 19 chemin de la Butte, 31400 Toulouse, France
Phone: +336 7983 6418 Fax: +335 6154 1928
http://www.vaxus.org

10 réponses

1 2
Avatar
Raymond [mvp]
bonjour.

avant de partir dans tous les sens et vouloir tout traiter tout de suite ,
il serait préférable de passer quelques temps à savoir quels formulaires
sont utilisés et par qui, combien de fois et combien de temps. ensuite à
l'analyse de ces données tu pourras classer tes priporités et faire un
journal par formulaire. pour faire un journal global tu trouveras des idées
sur la page : http://access.seneque.free.fr/journal_surveillance.htm

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Didier Morandi" a écrit dans le message de
news:bvg15a$2nld$
Bonjour à tous et bonne année,

Je voudrais créer le journal d'exploitation d'une grosse appli dont les
auteurs

et le contrôle ont été perdus, et dont je récupère la maintenance.

Afin de savoir un peu ce qui s'y passe, j'ai dans un premier temps ajouté
sur

tous les écrans les noms des formulaires et sous-f. Je souhaite maintenant
créer

une trace des modules VB exécutés par les différents formulaires.

Etant débutant sur la programmation ACCESS/VB, je suis donc allé à la FNAC
et

j'ai acquis le John Viescas (Access 2002 au quotidien), le Greg Perry (VB
6 en

21 jours et un divorce) et *le* F. Scott Barker (programmation Access).

Ebé, je n'y ai trouvé que la possibilité d'écrire des messages d'erreur
dans une

table via un error handler (bon, d'accord, je n'ai pas tout lu mais
presque :-)

Ce que je voudrais, c'est avoir dans un fichier (avec DoCmd.OutputTo par
exemple) l'état suivant :

type nom routine date/heure
----------+------------+------------------------+--------------------
Formulaire ListeClients Private Sub Form_Load() 31-jan-2004 11:30:01
Formulaire ListeClients Private Sub faitmoiça() 31-jan-2004 11:30:02
Formulaire ListeClients Private Sub Form_Close() 31-jan-2004 11:32:00
etc.

En DCL, le langage de script de VMS, j'aurais fait un truc comme ça :

1. ouvrir un fichier texte au début de l'appli
2. inclure (automatiquement) dans tous les scripts la ligne
$ write FichierLog "Entrée dans ",f$environnement(procedure)," le ",
f$time()

3. fermer le fichier en sortie de procédure

f$environnement(procedure) me donne le nom complet du script et son
emplacement

f$time() me donne l'quivalent de "Now".

Qu'en pensez-vous ?
Merci.

D.
--
VAXUS - Your new helpful friend in the DEC Family!
EHQ: 19 chemin de la Butte, 31400 Toulouse, France
Phone: +336 7983 6418 Fax: +335 6154 1928
http://www.vaxus.org



Avatar
Didier Morandi
Raymond [mvp] wrote:

bonjour.

avant de partir dans tous les sens et vouloir tout traiter tout de suite ,
il serait préférable de passer quelques temps à savoir quels formulaires
sont utilisés et par qui, combien de fois et combien de temps. ensuite à
l'analyse de ces données tu pourras classer tes priporités et faire un
journal par formulaire. pour faire un journal global tu trouveras des idées
sur la page : http://access.seneque.free.fr/journal_surveillance.htm


Raymond Sénèque, mon Serviteur, étant moi aussi lyonnais (et je le prouve quand
je vais faire une babasse dans un cani après avoir bu un Belu à la Gadagne :-)
je te réponds franchement :

Je ne "pars pas dans tous les sens", j'utilise mes méthodes... De plus "tous les
formulaires sont utilisés et par tout le monde" et je saurai "combien de fois et
combien de temps" précisément avec cette routine.

Au fait, le lien indiqué dit le quoi mais pas le comment. Par exemple:

référencer la librairie DAO3.6


tu fais ça comment ? Et qu'est-ce que c'est que la librairie DA03.6 ?

Merci pour tout.

Le gône.
1950 : Clinique du Parc (areuh)
1960 : Lycée du Parc
1968 : Cours Maisonneuve
1969 : Cours Pascal

D.
--
VAXUS - Your new helpful friend in the DEC Family!
EHQ: 19 chemin de la Butte, 31400 Toulouse, France
Phone: +336 7983 6418 Fax: +335 6154 1928
http://www.vaxus.org

Avatar
Raymond [mvp]
bonjour mon gone et cadet.

Alt+F11
menu outils / références
cocher la ligne microsoft DAO3.6 object library

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Didier Morandi" a écrit dans le message de
news:bvgko8$n8$
Raymond [mvp] wrote:

bonjour.

avant de partir dans tous les sens et vouloir tout traiter tout de suite
,


il serait préférable de passer quelques temps à savoir quels formulaires
sont utilisés et par qui, combien de fois et combien de temps. ensuite à
l'analyse de ces données tu pourras classer tes priporités et faire un
journal par formulaire. pour faire un journal global tu trouveras des
idées


sur la page : http://access.seneque.free.fr/journal_surveillance.htm


Raymond Sénèque, mon Serviteur, étant moi aussi lyonnais (et je le prouve
quand

je vais faire une babasse dans un cani après avoir bu un Belu à la Gadagne
:-)

je te réponds franchement :

Je ne "pars pas dans tous les sens", j'utilise mes méthodes... De plus
"tous les

formulaires sont utilisés et par tout le monde" et je saurai "combien de
fois et

combien de temps" précisément avec cette routine.

Au fait, le lien indiqué dit le quoi mais pas le comment. Par exemple:

référencer la librairie DAO3.6


tu fais ça comment ? Et qu'est-ce que c'est que la librairie DA03.6 ?

Merci pour tout.

Le gône.
1950 : Clinique du Parc (areuh)
1960 : Lycée du Parc
1968 : Cours Maisonneuve
1969 : Cours Pascal

D.
--
VAXUS - Your new helpful friend in the DEC Family!
EHQ: 19 chemin de la Butte, 31400 Toulouse, France
Phone: +336 7983 6418 Fax: +335 6154 1928
http://www.vaxus.org




Avatar
Maxence HUBICHE
Bonjour Didier !

Je trouve ton idée très sympa...
Va falloir que je médite là-dessus ...
mais à priori, je me lancerai sur un truc du genre :

-Création d'un module de classe (clsScann)
-Création d'un module standard (modScann)

=-=-=-=-=-Tout ce qui suit est dans un module standard (modScann)
Public MyScann as New clsScann

=-=-=-=-=-Tout ce qui suit est dans un module de classe (clsScann)
-Une variable publique intFile as Long
-Une Procédure publique Ecrire
Public Function Ecrire(Optional sTypeObj as string="", Optional sNomObjet as
string="",Optional sNomProc as string="") as boolean
On error Goto GestErr
Dim sMSG as String
sMSG=sTypeObj & vbtab & sNomObjet & vbtab & sNomProc & vbTab &
Format(Now(),"yyyymmddhhnnss") & vbtab & CurrentUser()
Print #intFile, sMSG
Ecrire=True
exit Function
GestErr:
Msgbox err.description,vbcritical,"erreur inattendue lors de l'écriture"
Ecrireúlse
End function

-Une procédure à écrire dans le Class_Initialize
On error Goto GestErr
intFile=FreeFile
Open "monserveurmonpathlog.txt" for output as #intFile
Print #intFile, " type" & vbtab & " nom" & vbtab & " routine" & vbtab
& "date/heure" & vbtab & "Utilisateur"
Exit Sub
GestErr:
Msgbox err.description,vbcritical,"erreur inattendue lors de l'écriture"

-et enfin, dans le Class_Terminate :
On error Goto GestErr
Print #intFile, "Fin du scann"
FinProg:
Close #intFile
Exit Sub
GestErr:
Msgbox err.description,vbcritical,"erreur inattendue lors de l'écriture"
Resume FinProg

=-=-=-=-=-Comment l'utiliser ?
A partir de là, il devrait te suffire d'écrire :
MyScann.Ecrire "Formulaire","frmMenu","Form_Load()"
(par exemple) pour que ta ligne s'écrive dans le fichier.
Bon, soyons clairs : j'ai pondu ce code au fur et à mesure que je te faisais
le post, alors ne m'en veut pas trop s'il y a des erreurs. Je ne me suis pas
relu. J'ai juste voulu te donner une idée. Une orientation :)

A plus !

Maxence
Avatar
Didier Morandi
Jockey.

Y'a toujours des saucissons briochés chez Chorliet ?

D.

Raymond [mvp] wrote:
bonjour mon gone et cadet.

Alt+F11
menu outils / références
cocher la ligne microsoft DAO3.6 object library


Avatar
Didier Morandi
Maxence HUBICHE wrote:

Bonjour Didier !

Je trouve ton idée très sympa...
Va falloir que je médite là-dessus ...
mais à priori, je me lancerai sur un truc du genre :

-Création d'un module de classe (clsScann)
-Création d'un module standard (modScann)


--8<--

Heu, va falloir qq heures de pratique avant de comprendre tout ça. Jamais fait
de VB, moi... :-)

Merci qd même.

(je retourne à ma partie de Raven Shield)

D.

Avatar
Didier Morandi
Raymond [mvp] wrote:

http://access.seneque.free.fr/journal_surveillance.htm
créer une table cachée (ou non) nommée "_Surveillance" avec ou sans clé primaire,


Pas trouvé "table cachée" dans la doc ni dans l'aide on line, mon Poteau.

D.

Avatar
Didier Morandi
Raymond [mvp] wrote:


http://access.seneque.free.fr/journal_surveillance.htm


Date Code Libelle Utilisation
-------------------+----+-------+------------------------
01/02/2004 09:22:38 Form (rien) Ouverture
01/02/2004 09:22:47 Form (rien) Fermeture
01/02/2004 09:22:50 Form (rien) Ouverture
01/02/2004 09:22:59 Form (rien) Fermeture
01/02/2004 09:26:51 Form (rien) Ouverture
01/02/2004 09:26:51 Form (rien) Démarrage
01/02/2004 09:26:58 Form (rien) Gestion de chantiers
01/02/2004 09:26:59 Form (rien) Gestion des clients
01/02/2004 09:27:01 Form (rien) Fiche client
../..

Bon, voici qq résultats.

1. ca marche
2. il n'y a rien dans Libellé (champ Me.Name)
3. il n'y a que des "Form" même si je passe dans autre chose ?
4. la fenêtre de surveillance apparaît minimisée en bas et à gauche de l'écran,
j'aimerais la cacher.
5. comment avoir aussi le nom des procédures exécutées dans chaque formulaire ?
Je suppose que je dois ajouter un bout de code dans chaque, pour mettre la table
à jour, exact ?

Merci bcp.
Je promets de rédiger un HowTo sur la journalisation de l'exploitation sous
Access quand j'aurai fini.

D.

Avatar
Didier Morandi
Didier Morandi wrote:

Raymond [mvp] wrote:

http://access.seneque.free.fr/journal_surveillance.htm
créer une table cachée (ou non) nommée "_Surveillance" avec ou sans
clé primaire,



Pas trouvé "table cachée" dans la doc ni dans l'aide on line, mon Poteau.


Outils -> Options -> Affichage -> masqué.

Merci.

De rien.

:-)

D.


Avatar
Maxence HUBICHE
Bon, j'ai un peu modifié, et testé,et ça marche.
Crée 2 modules :
1 module de classe et 1 module standard
Le module standard s'appellera modScann
Le module de classe s'appellera clsScann

Ce code est commenté.
Si tu veux utiliser ce code, il te suffira d'apeler la fonction Ecrire en
lui passantles informations attendues.
- un exemple (VBA) :
Ecrire "Formulaire", "Formulaire1", "Sur Activation"
- un exemple (Expression) :
ìrire("Formulaire";"Formulaire1";"Sur Activation")

Maintenant, c'est à toi de jouer.
N'oublies pas que la touche F1 sur un mot que tu ne comprends pas est plus
qu'utile :)

A bientôt !


===================ÞBUT - COPIER dans modScann ============ Option Explicit
Option Compare Database
'Déclaration d'une variable publique pointant sur une nouvelle (New)
instance de la classe ('modèle d'objet') clsScann
'Comme cette déclaration est publique ET dans un module standard, la
variable est sensée être disponible en permanence,
'depuis le départ de l'application jusqu'à sa terminaison.
Public MyScann As New clsScann

Public Function Ecrire(Optional sTypeObj As String = "", _
Optional sNomObjet As String = "", _
Optional sNomProc As String = "") As Boolean
'Procédure publique.
'Tu pourras l'utiliser partout (dans les procédure évènementielles,
' dans les macros, ...)

MyScann.Ecrire sTypeObj, sNomObjet, sNomProc
End Function
====================FIN- COPIER dans modScann ============== ===================ÞBUT - COPIER dans clsScann ============ Option Compare Database
Option Explicit
'Déclaration d'une variable privée permettant d'identifier le fichier texte
par un N°
'Ce n° sera utlisé à chaque fois que nécessaire lors du programme
(ouverture/écriture/fermeture)
Private intFile As Long

Public Function Ecrire(Optional sTypeObj As String = "", _
Optional sNomObjet As String = "", _
Optional sNomProc As String = "") As Boolean
'Cette procédure a pour objectif d'écrire une ligne dans le fichier.
'Les informations variables peuvent être passées en argument :
' sTypeObjet => type d'objet. Lors de l'usage, écrire "Formulaire" ou
"Etat" suivant le cas
' sNomObjet => Nom de l'objet. Lors de l'usage écrire entre guillemets le
nom du formulaire ou de l'état
' sNomProc => Nom de la procédure. Lors de l'usage, écrire entre
guillemets, le nom de la procédure

'Déclaration de la gestion des erreurs
On Error GoTo GestErr
'Déclaration d'une variable utilisée uniquement dans cette procédure
'Elle sert à recenser les informations à écrire sur une ligne.
Dim sMSG As String
'Fabrication de la ligne à écrire avec les informations passées en
paramètre, la date/heure et l'utilisateur
'Le séparateur et TABULATION
sMSG = sTypeObj & vbTab & sNomObjet & vbTab & sNomProc & vbTab & _
Format(Now(), "yyyymmddhhnnss") & vbTab & CurrentUser()
'Ecriture dans le fichier de la ligne
Print #intFile, sMSG
Ecrire = True
'Fin de la fonction si tout s'est bien passé
Exit Function
GestErr:
'En cas d'erreur, afficher le message d'erreur
MsgBox Err.Description, vbCritical, "erreur inattendue lors de
l'écriture"
Ecrire = False
End Function

Private Sub Class_Initialize()
'Déclaration du Gestionnaire d'erreur
On Error GoTo GestErr
'Définition d'un n° pour le fichier, en prenant le premier n°
'Séquentiel non utilisé
intFile = FreeFile
'Ouverture du fichier.
Open "c:log_" & Format(Now, "yyyymmddhhnnss") & ".txt" For Output As
#intFile
'Inscription de l'entête du fichier
Print #intFile, " type" & vbTab & " nom" & vbTab & " routine" & _
vbTab & "date/heure" & vbTab & "Utilisateur"
Exit Sub
GestErr:
'En cas d'erreur, afficher le message
MsgBox Err.Description, vbCritical, "erreur inattendue lors de
l'écriture"
End Sub

Private Sub Class_Terminate()
'Déclaration du Gestionnaire d'erreur
On Error GoTo GestErr
'Ecriture de la fin du scann
Print #intFile, "Fin du scann à " & Now()
FinProg:
'Fermeture systématique du fichier
Close #intFile
Exit Sub
GestErr:
'En cas d'erreur, afficher le message
MsgBox Err.Description, vbCritical, "erreur inattendue lors de
l'écriture"
Resume FinProg
End Sub
====================FIN- COPIER dans clsScann ================
1 2