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

VBA Access Discussion :

Une progress bar pendant l'execution d'une requete SQL


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Une progress bar pendant l'execution d'une requete SQL
    Bonjour,

    CEla fait deja pas mal de tremps que je cherche la solution a ce probleme donc j'aimerai le soumettre a la communaute

    J'ai creer un formulaire qui contient une progressbar et qui s'affiche avant de lancer ma requete SQL celui s'affiche correctement mais il m'est impossible de rafraichir ma progress bar

    voici le code de ma fonction
    Le formulaire "waiting forml est celui qui contient la progress bar


    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
    Private Sub PFCBt_Click()
     
            Dim db As DAO.Database, rst As DAO.Recordset
            Dim sql As String
     
     
    DoCmd.OpenForm "WaitingForm"
    DoEvents
     
     
    sql = "select * from mytable"
     
    Set db = CurrentDb
     
     
    Set rst = db.OpenRecordset(sql, dbOpenDynaset, dbReadOnly)
     
    Call ShowResults(rst)
     
    End Sub
    Et voci le code du formulaire:

    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
    Private Sub Form_Open(Cancel As Integer)
    DoEvents
    i = 1
     
     
     
    End Sub
     
    Private Sub Form_Timer()
     
    ProgressBar1.Value = i
    i = i + 1
     
    If i = 100 Then i = 0
     
    End Sub

    Est ce que je devrais utiliser autre chose que l'event ontimer?
    Bien sure si je stop la fonction PFCBt_Click() la progress bar se met en route automatiquement.
    Comment faire marcher ma progressbar et ma requete sql en meme temps?

    Merci de votre aide

  2. #2
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 796
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 796
    Points : 3 075
    Points
    3 075
    Par défaut
    Bonjour

    Il y a près d'un an, j'avais planché sur le même besoin (affichage d'une progress bar). J'ai abandonné : il semble que cela soit impossible.

    Comment savoir le temps qu'il faut pour que ton SQL retourne un recordset ? Comment savoir où il en est (10%, 20%, ...)

    Pour cela, il faudrait que ton "SQL engine" retourne ces infos or ce n'est pas le cas avec MSAccess.

  3. #3
    Candidat au Club
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par cavo789 Voir le message
    Bonjour

    Il y a près d'un an, j'avais planché sur le même besoin (affichage d'une progress bar). J'ai abandonné : il semble que cela soit impossible.

    Comment savoir le temps qu'il faut pour que ton SQL retourne un recordset ? Comment savoir où il en est (10%, 20%, ...)

    Pour cela, il faudrait que ton "SQL engine" retourne ces infos or ce n'est pas le cas avec MSAccess.

    La query sql est basee sur DB2. JE voulais contourner le probleme de l'avancement de la query en simulant une progress bar avec l'enement ontime car en fait je veux juste que mon user ne se retrouve pas avec un ecran fixe sans savoir si l'appli est plante ou pas

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,
    Citation Envoyé par stef2000 Voir le message
    CEla fait deja pas mal de tremps que je cherche la solution a ce probleme donc j'aimerai le soumettre a la communaute

    J'ai creer un formulaire qui contient une progressbar et qui s'affiche avant de lancer ma requete SQL celui s'affiche correctement mais il m'est impossible de rafraichir ma progress bar
    Au lieu d'utiliser DAO, il y a peut être une solution du côté de ADO.

    En effet, il me semble que ADO est capable de lancer l'exécution d'une requête de manière asynchrone, c'est à dire sans rester bloqué dans l'attente du résultat.
    En plus, dans ce cas d'une exécution asynchrone, ADO déclenche des événements relatifs à l'avancement.

    Mais, je n'ai pas d'exemple à te donner...
    c'est juste une piste !

    Bon courage et tiens nous au courant.
    _

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    une idée moins glorieuse mais efficace :
    Si c'est juste pour savoir si l'appli n'est pas plantée on n'est pas obligé de connaitre le pourcentage d'avancement mais d'afficher seulement une barre de progression semi-graphique (un textbox suffit) qui si elle arrive au bout, repart de zéro comme le fait à l'installation de nombreux logiciels, (SQL server 2005 express edition, etc...)

    cordialement,

    Philippe

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par philben Voir le message
    une idée moins glorieuse mais efficace :
    Si c'est juste pour savoir si l'appli n'est pas plantée on n'est pas obligé de connaitre le pourcentage d'avancement mais d'afficher seulement une barre de progression semi-graphique (un textbox suffit) qui si elle arrive au bout, repart de zéro comme le fait à l'installation de nombreux logiciels, (SQL server 2005 express edition, etc...)
    Le souci c'est que l'exécution du code est bloquée par l'instruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = db.OpenRecordset(sql, dbOpenDynaset, dbReadOnly)
    Ici, les timers en tout genre son impuissants à animer la barre de progression.
    D'où l'exécution asynchrone...

    Ou bien alors, on peut exécuter la requête avec DAO dans un thread libre...
    (ça c'est pour ceux qui suivent le forum avec assiduité re-)
    _

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour JBO,

    en effet, tu as raison, on en revient toujours a ces fameux thread !

    Amicalement,

    Philippe

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Janvier 2008
    Messages : 88
    Points : 44
    Points
    44
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    jauge = SysCmd(acSysCmdInitMeter, "Importation des bases", UBound(aFullArray))
    Moi j'utilise ce code pour montrer l'progress bar

  9. #9
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    A tout hasard, je sais pas si ça peut aider.... Mais à défaut d'avoir une progress barre, on peut peut-être monter le pourcentage d'avancement du traitement....

    Si on va chercher le nombre total d'enregistrements de la requete et ensuite à chaque ligne traitée on calcule le ratio position/nbr total d'enregistrement.

    J'suis peut être à côté de la plaque mais on sait jamais....

    Je suis preneur de la solution finale que tu retiendras....

  10. #10
    Membre expérimenté Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 406
    Points : 1 683
    Points
    1 683
    Par défaut
    Bonsoir,

    Juste un petit bout de code vite fait et à améliorer.
    Il est basé sur l'ActiveX Microsoft Progress Bar, version 6.0.

    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
    Private Sub Commande2_Click()
        'Pb est le nom de la barre de progression
        Dim i As Long
        Dim oRst As DAO.Recordset
        Dim oDb As DAO.Database
        Set oDb = CurrentDb
        Set oRst = oDb.OpenRecordset("SELECT * FROM tblSIT", dbOpenDynaset)
        oRst.MoveLast
        oRst.MoveFirst
        Me.Pb.Min = 0
        Me.Pb.Max = oRst.RecordCount
        i = 1
        For i = 1 To oRst.RecordCount
            ' Traitement
            '
            Me.Pb.Value = Me.Pb.Value + 1
        Next
        oRst.Close
        oDb.Close
        Set oRst = Nothing
        Set oDb = Nothing
    End Sub
    C'est pas terrible... mais je vais me coucher !

    Bonne soirée

Discussions similaires

  1. [VB.NET] Progress Bar et l'execution d'une procedure stockée
    Par messi1987 dans le forum Débuter
    Réponses: 4
    Dernier message: 20/03/2014, 00h22
  2. Réponses: 2
    Dernier message: 26/08/2009, 15h44
  3. Réponses: 8
    Dernier message: 17/03/2009, 18h49
  4. [C#] Afficher une progress bar pendant une tâche de fond
    Par therock dans le forum Windows Forms
    Réponses: 2
    Dernier message: 01/06/2007, 09h33
  5. [VB.NET] Mise en place d'une progress bar
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 14
    Dernier message: 19/10/2004, 10h23

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