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

WinDev Discussion :

Jauge de progression avec windev


Sujet :

WinDev

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Jauge de progression avec windev
    Bonjour,
    Je travaille sur un projet personnel depuis plusieurs mois avec Windev. Dans mon application j'ai créer une fenêtre avec un bouton dont le rôle est de copier l'intégralité des données d'une table (Fichier) vers une autre grâce à une requête SQL que j'exécute avec la fonction "HExecuteRequeteSQL", vu que le traitement est assez long j'aimerais afficher dans ma fenêtre une barre ou jauge de progression qui montre à l'utilisateur le traitement encours.

    Quelqu'un pourrait-il m'aider à trouver une solution à mon problème ?

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    Bonjour

    A quel niveau tu bloques ?

    Voir l'aide en ligne de Pc-soft : http://doc.pcsoft.fr/?1013141

    Bon dev
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    Salut!

    Cela m'a pris 20 secondes (2 secondes pour écrire et 18 à cause de mon internet caca )



    Bon courage

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    @ Le PPR
    En écho à dsr57, on n'ouvre pas de discussion en plusieurs exemplaires, surtout à 25 minutes d'intervalle.
    Il n'y a pas de permanence même pour les "urgences".
    Peut-être pouvez-vous encore supprimer la discussion qui n'est pas suivie, sinon merci de le demander au modérateur.

    @ dsr57 et @ zouzoukha
    Si vous lisez attentivement la question, il 'agit d'une " requête SQL que j'exécute avec la fonction "HExecuteRequeteSQL"".
    Dans ce cas, il n'est pas possible de monitorer la progression du traitement et il n'est donc pas possible d'alimenter une jauge.

    Si Le PPR désire absolument une jauge, il doit
    - soit utiliser fCopierFichier avec la constante frJauge, mais cela n'est vraisemblablement pas d'application dans son contexte ;
    - soit passer par un parcours classique de sa table / fichier avec les instructions Hxxx et inclure l'alimentation d'une jauge dans sa boucle de traitement.
    Par contre, cette seconde option risque d'avoir des temps de traitement encore plus long qu'avec une requête SQL.

    Dans son contexte, je ne vois que deux pseudo-solutions : un message d'attente ou une jauge "autonome" qui indiquera simplement que le traitement est en cours et bouclera éventuellement si la borne maximale est atteinte.

    Bonne journée

    Hemgé

  5. #5
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    Bonjour

    soit passer par un parcours classique de sa table / fichier avec les instructions Hxxx et inclure l'alimentation d'une jauge dans sa boucle de traitement.
    Hemgé, j'avais émis l'hypothèse que c'était la solution mis en place par Le PPR , c'est pour cela que j'avais proposé l'aide en ligne.


    Par contre, cette seconde option risque d'avoir des temps de traitement encore plus long qu'avec une requête SQL.
    La requête initiale est elle de type INSERT INTO avec un SELECT imbriqué ?

    Bon dev
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Citation Envoyé par dsr57 Voir le message
    Hemgé, j'avais émis l'hypothèse que c'était la solution mis en place par Le PPR , c'est pour cela que j'avais proposé l'aide en ligne.
    Hypothèse, thèse, antithèse ... Oui, mais en fait, ... qu'en est-il ?.
    En réalité, comme relevé, c'était écrit noir sur blanc : "grâce à une requête SQL que j'exécute avec la fonction "HExecuteRequeteSQL" "

    Si nous déformons les questions posées alors que généralement c'est plutôt les faire préciser qui est indispensable, les réponses ne seront pas adaptées et d'autant moins que de nombreux intervenants réagissent au(x) dernier(s) message(s) plutôt que de relire l'entièreté de la discussion.

  7. #7
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    Salut!

    Voilà ce que j'ai compris :

    Un Hexecuterequetesql() renvoie les enregistrements concernés.

    On balaye le résultat de cette requête du début à la fin et on effectue des hajoute sur le fichier à remplir.

    Dans cette boucle on peut insérer une jauge.

  8. #8
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Citation Envoyé par zouzoukha Voir le message
    Un Hexecuterequetesql() renvoie les enregistrements concernés..
    ... ET opère ensuite un "SQL INSERT" dans une autre table, pour ce que j'en ai compris.

    Tout se passe apparemment au sein d'une seule et même requête.

    Allez, Le PPR, nous aimerions savoir !
    Dites nous en davantage.

  9. #9
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut
    Une première solution consiste à monter une jauge "infinie".

    Il est aussi possible de monter une première requête de comptage et de récupérer le nombre de ligne à traiter.
    Ensuite, une fois lancée, vérifier l'état de l'exécution de la requête dans une boucle avec la propriété ..ExécutionTerminée.
    La boucle peut alors comparer le nombre d'enregistrement lu initialement à celui en cours via : HNbEnr(hNonBloquant)

  10. #10
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 056
    Points : 9 394
    Points
    9 394
    Par défaut
    Citation Envoyé par zouzoukha Voir le message
    Salut!

    Voilà ce que j'ai compris :

    Un Hexecuterequetesql() renvoie les enregistrements concernés.

    On balaye le résultat de cette requête du début à la fin et on effectue des hajoute sur le fichier à remplir.

    Dans cette boucle on peut insérer une jauge.

    Le problème est que si la requête est complexe, le HexecuteRequeteSQL peut mettre 20 minutes ou plus avant de renvoyer le premier enregistrement.
    Et en général, les enregistrements suivants arriveront relativement vite, et à vitesse régulière.
    Pour cette 2 ème phase, on pourra effectivement bâtir une jauge efficace.
    Mais la jauge se déclenchera seulement à la fin du HexecuteRequeteSQL.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci à vous tous pour m'avoir répondu !! et désolé de vous répondre aussi tard (problème de connexion internet... )

    Pour répondre à la question de dsr57 et Hemgé, oui en effet ma requête est du type INSERT INTO avec un SELECT imbriqué, comme par exemple(insert into table1 select * from table2) .

    Je précise aussi ( à zouzoukha et tout le monde ) que je n'utilise pas de HAjoute dans mon code, en fait tout se passe dans une seule requête. La fonction HexecuteRequeteSQL me permet juste d'exécuter mon code SQL que j'ai saisi...

    Par contre je ne comprend pas bien la solution que me propose tbc92 et zouzoukha... et je ne sais pas si ma requête est complexe...

    Devrais-je afficher une fraction de mon code pour avoir une meilleur idée de la chose ??

  12. #12
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Cela serait une bonne idée, afin de savoir comment tu remplis ta table (boucle).
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  13. #13
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Cela serait une bonne idée, afin de savoir comment tu remplis ta table (boucle).
    M'enfin, Le PPR vient de confirmer qu'il n'y a pas de boucle mais un seul traitement SQL.

    Pour faire simple, comme déjà écrit, il n'y a que la jauge infinie (j'ignorais l'existence de ce type de champ, merci R&B !) ou le message d'attente.

    Quand vous évoquez un traitement "assez long", à quelle durée faites-vous allusion ?
    Par ailleurs, il y a peut-être des améliorations à apporter à votre requête et aux index.
    Donc, oui, montrez nous votre code.

    Parce que si c'est effectivement "très long" et qu'il n'y a aucune amélioration sensible à apporter à votre requête, alors vous pouvez envisager des solutions du type de celle proposée par R&B.
    Autrement, cela ne vaut pas la peine de s'embarquer là-dedans sauf si on maîtrise très bien la chose.

  14. #14
    Membre émérite
    Femme Profil pro
    .
    Inscrit en
    Janvier 2012
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 999
    Points : 2 526
    Points
    2 526
    Par défaut
    LST 69 Afficher une jauge de progression pendant le traitement d’une requête HFSQL

    http://www.pcsoft.fr/lst/Last/lst69.htm

  15. #15
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut LST 69
    JAUGE AVANCÉE (WINDEV)
    Afficher une jauge de progression pendant le traitement d’une requête HFSQL

    JAUGE AVANCÉE (WINDEV) : Afficher une jauge de progression pendant le traitement d’une requête Hyper FileDurant l’exécution d’un traitement coûteux en temps sur une requête, il est important d’informer l’utilisateur de l’avancée.
    L’exemple “WD Jauge Requête” montre deux manières de présenter
    à l’utilisateur le suivi du traitement.
    Merci serendib.
    En disposez -vous et pouvez-vous nous informer un peu plus ? Pas de code évidemment, mais les deux approches.
    Sinon, qui peut nous en dire plus à ce sujet ?

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Oups !... désolé (Hemgé, frenchsting et tout le monde), je crois que je vous ai peut être tous induit en erreur lorsque j'ai parlé de table. En fait je voulais parler d'un fichier (de ma BD HFSQL) que je copie vers un autre fichier de ma BD HFSQL (avec une requête SQL du genre : insert into table1 select * from table2 ) voilà pourquoi je n'ai pas besoin d'une boucle, vu que tout se passe dans la requête.
    Mais merci à vous tous pour m'avoir répondu encore une fois...

    En lisant ce que serendib à écrit, je crois que c'est ce qu'il me faut. mais malheureusement je ne dispose pas de ce cours;

    Mais (comme Hemgé a su le dire) svp, pourriez vous nous donner un peu plus d'info à ce sujet ?? Je veux dire l'algorithme ou bien la syntaxe pour ce genre de traitement ?

    ou bien, quelqu'un pourrait-il m'en dire un peu plus sur la syntaxe ??svp

  17. #17
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonsoir

    Tranquillisez-vous, qu'il s'agisse de tables SQL ou de fichiers WD, le principe est le même : une requête SQL est une espèce de boîte noire qui rend un résultat sans qu'on puisse vraiment interférer avec son déroulement.
    En tout cas, en ce qui concerne votre problème.
    (Mais on avait compris qu'il s'agissait de fichiers WD)

    Voulez-vous s'il vous plait, pour qu'on progresse un peu :
    • préfixer la discussion avec la version de Windev que vous utilisez : certaines solutions dépendent de la version qu vous utilisez et notre tâche sera donc simplifiée.
      Par exemple, le jauge infinie évoquée par R&B est une nouveauté de la version 20 et vous ne pourriez donc y recourir que si vous disposez de WD20.
      Autrement, il faudrait revenir à ma proposition et la programmer vous-même.
      De plus, les versions Express connaissent certaines restrictions fonctionnelles.
    • répondre à la question de la durée de l'attente à laquelle vos utilisateurs sont exposés : 1 minute, 10 minutes ou deux heures ?
      En bref, cela vaut-il la peine de faire quelque chose ?
    • communiquer votre code, comme demandé par divers intervenants et d'ailleurs proposé par vous-même.



    Enfin, à part le principe des solutions exposées dans la LST 69, les abonnés ne pourront pas vous communiquer le code exposé, qui est protégé par des droits d'auteur.

    Dans l'attente de vos informations,

    Hemgé

  18. #18
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    je ne sais pas si cela peut t'aider mais j'avais traité un sujet similaire ici

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  19. #19
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut
    +1 J. P., ce à quoi je faisait référence !

  20. #20
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Bonsoir à tous !!!
    Désolé de reprendre la discussion aussi tard, j'avais perdu le répertoire de mon projet...

    1 MaRequête est une Source de Données
    2 ReqCount est une Source de Données
    3 // on compte le nb d'enregistrements
    4 HExécuteRequêteSQL(ReqCount,"SELECT COUNT(*) as nb FROM CONTACT")
    5 JAUGE_Jauge..BorneMax = ReqCount.nb
    6 // on lance la requête
    7 HExécuteRequêteSQL(MaRequête,"SELECT * FROM CONTACT")
    8 TANTQUE MaRequête..ExécutionTerminée = Faux // on teste si la requête est terminée
    9 JAUGE_Jauge = HNbEnr(MaRequête, hNonBloquant) //HnbEnr renvoie le nb d'enregistrements déjà traités
    10 Multitâche(-2) // on rend la main pendant 20 ms
    11 FIN
    12 JAUGE_Jauge = ReqCount.nb
    Merci jurassic pork, mais je crois que ma requête est un peu plus complexe, voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    //Initialisation de la requête
    HExécuteRequêteSQL(Req_Archive,"INSERT INTO Archive (Matricule,NomA,prénomA,Adr,Tel1,Tel2,ClasseA,CMensuel,Cformation,TPaye,AnneeA)  
    SELECT ETUDIANT.IDEtud,Nom,Prénom,Quartier,Tel,TelTut,codeoption, CMens, CMens*9,  SUM(MontPay),CodAn FROM PAYEMENT,ETUDIANT WHERE ETUDIANT.IDEtud = PAYEMENT.IDEtud  GROUP BY ETUDIANT.IDEtud,Nom,Prénom,Quartier,Tel,TelTut,codeoption,CMens,CMens*9,CodAn ")
    Est - il possible de réaliser cette procédure avec ce genre de requête ???

    Merci

Discussions similaires

  1. [WD17] WINDEV Manipulation d'une jauge de progression
    Par massy2013 dans le forum WinDev
    Réponses: 24
    Dernier message: 05/11/2014, 07h45
  2. Lire la mémoire vive avec WinDev
    Par ritchi46 dans le forum WinDev
    Réponses: 5
    Dernier message: 24/08/2006, 01h04
  3. Les fenêtres avec WinDev
    Par rar77 dans le forum WinDev
    Réponses: 6
    Dernier message: 08/08/2006, 12h25

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