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 :

afficher a l'ecran l'evolution du log de mon programme


Sujet :

Access

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 94
    Points : 68
    Points
    68
    Par défaut afficher a l'ecran l'evolution du log de mon programme
    voila,

    je ne sait pas trop comment googeler ce que je veut faire alors je fais appel a vous

    J ai un programme access qui fait tourner des procédures assez longues dont je souhaite monitorer l'evolution
    Pour le moment access se freeze et me rends la main 10 min plus tard

    donc je voudrais inserer des petites lignes de log au sein de mes procédures et afficher ces lignes à l'ecran au fur et a mesure de la progression de mes procedures

    En peut comme au boot du pc, on voit l'initialisation des composants s afficher les un apres les autres


    Qq un aurait deja (vu?) ce genre de choses ?
    un commentaire ?
    une idee ?

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour c'est un problème récurent en Access : l'information des utilisateurs lors d'un traitement long car Access n'est pas multitâche.

    Il n'y a pas de solution miracle et elle varie selon comment ton traitement est monté.

    Si tu as un traitement long composé d'une seule "boite noire" (c-à-d un bloc où tu as accès au début et à la fin mais pas au milieu, ex : un appel à une procédure stockée dans une base données distante ou une GROSSE requête), la seule méthode que je connaisse est de mettre un message alertant l'utilisateur et lui demandant de patienter gentiment.

    Si tu as accès au code (ex : dans une boucle) là tu peux glisser une instruction pour informer ton utilisateur. Soit via un formulaire personnel soit via la barre de progression de Access.

    Cela ressemble à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i=1 to 100000000
      'ici du code de traitement
      'ici le message disant où tu en est rendu
      doevents 'Indispensable pour que Access mette l'écran à jour.
    next i
    Si tu as besoin de plus de détails, demande.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,

    Par exemple, tu pourrais avoir :
    - une table « tLog » avec 2 colonnes : Quand et Message ;
    - un formulaire qui affiche ces enregistrements en continu.

    Quand tu lances ton processus ,
    - tu vidanges « tLog » ;
    - tu ouvres le formulaire (il n’affichera rien) ;
    - à chaque point de passage que tu veux contrôler, tu crées un enregistrement dans la table avec l’heure (Now()) et un message explicite et tu réactualises le formulaire.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 94
    Points : 68
    Points
    68
    Par défaut G0002092913
    Merci pour vos réponses, il y a de bonnes pistes.

    J'aimerai préciser un point avec vous concernant le coté monoprocessus d'access.

    En effet le morceau de code dans ce cas est une grosse procédure (que je pourrais peut etre découper).
    Mettons que je mette en place un mecanisme d'affichage comme proposé en passant par une table de log affichée dans un formulaire, le fait de rester dans ma grosse procedure me permet il d'utiliser doevents ? Autrement dit, doevents est un moyen de forcer/interrompre le monoprocess pour mettre à jour les infos de l'écran ?

    Citation Envoyé par marot_r Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i=1 to 100000000
      'ici du code de traitement
      'ici le message disant où tu en est rendu
      doevents 'Indispensable pour que Access mette l'écran à jour.
    next i

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Autrement dit, doevents est un moyen de forcer/interrompre le monoprocess pour mettre à jour les infos de l'écran ?
    Oui, en gros. Pour Windows mettre à jour l'affichage est la dernière des priorités.
    Donc si un programme monopolise toutes les ressources, Windows "attend" qu'il ait fini pour faire ses choses.
    Le DoEvents signale à Windows que Access lui rend la main quelques instants pour faire les opérations qu'il a en attente.

    Dans le détail ce doit être beaucoup plus compliqué mais c'est une bonne approximation pour comprendre le mécanisme.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Bonjour,

    Une autre méthode pour afficher les progrès de votre travail consiste à utiliser la barre de progrès SysCmd en bas à droite de l'écran. Cela donne un affichage assez léger.
    Pour mieux visualiser l'effet procuré, essayez ceci :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Option Compare Database
    Option Explicit
     
    Function Patience()
    'afficher une barre de progres Système dans coin inferieur droit.
    'la barre de progres ne s'affiche que si la Status Bar est affichée.   Voir Tools/Options/View : cochez Status Bar
    Dim i As Integer
    Dim dT As Date
    MsgBox ("je vais commencer")
     
    SysCmd acSysCmdRuntime
     
    'intitialiser la barre d'état avec le texte à afficher et la valeur totale
    SysCmd acSysCmdInitMeter, "Coucou, je vous dis Bonjour et je vous souhaite une bonne journée.", 5
     
    For i = 1 To 5 Step 1
        'faire avancer d'un cran la jauge d'avancement
        SysCmd acSysCmdUpdateMeter, i
        'patienter une seconde
        dT = Now()
        Do Until Second(Now() - dT) > 1
            DoEvents
        Loop
    Next i
     
    'supprime la jauge d'avancement
    SysCmd acSysCmdRemoveMeter
     
    MsgBox ("j ai fini")
     
    End Function

Discussions similaires

  1. Taille maximal affichable a l'ecran
    Par Phrederik dans le forum Mise en page CSS
    Réponses: 19
    Dernier message: 19/06/2007, 22h37
  2. Récupérer un mot affiché à l'écran
    Par g.squale.29 dans le forum MATLAB
    Réponses: 1
    Dernier message: 24/05/2007, 11h59
  3. Réponses: 3
    Dernier message: 09/02/2007, 15h40
  4. Réponses: 15
    Dernier message: 01/12/2005, 17h18
  5. Comment figer une Form et l'afficher en plein éecran ?
    Par aaronw dans le forum Composants VCL
    Réponses: 3
    Dernier message: 26/03/2005, 11h09

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