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 :

Mise en forme zone répétée


Sujet :

WinDev

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Août 2009
    Messages : 97
    Points : 59
    Points
    59
    Par défaut Mise en forme zone répétée
    Bonjour,

    J'ai mon programme actuellement en test qui est assez lent sur mes sites distants.

    J'ai trouvé l'interfaçe suspecte. Cela correspond à une zone répétée.
    Celle-ci contient 7 lignes * X colonnes d'utilisateurs (X peut aller jusqu’à 10 utilisateurs).

    Dans chaque cellules, j'ai :
    • 1 libellé correspondant à une date
    • 2 combos
    • 4 champs de saisie contenant des heures
    • 2 libellés que je me sers comme "cadre" pour afficher une couleur derrière ces éléments


    Le problème se situe au niveau d'une procédure.
    Celle-ci exécute dans une boucle de 1 à NbOccurence de la ZR, une requête SQL et met les données récupérées dans une case de ma zone répétée.
    Ensuite, dans cette même boucle, j'ai une procédure MiseEnForme qui va mettre en forme toutes mes cases.

    J'appel donc la requête + ma procédure de mise en forme un paquet de fois.

    Le souci d'après l'analyseur de performances viendrait donc de ma procédure de mise en forme.
    Celle-ci fait les choses suivantes :

    • Rend actif tous mes éléments de saisies (grisé par défaut) : donc j'ai bien sûr 6 attributs dans la ZR juste pour grisé
    • Selon ce que ma 1ère combo contient, j'attribue une couleur a mon libellé "cadre" et je rend visible/invisible ou grisé mes champs de saisie
    • Exactement la même chose pour ma 2ème combo
    • En fonction d'une valeur d'un attribut, je met une couleur de fond dans un champ forme
    • En fonction d'une valeur d'un attribut, j'affiche (ou non) un icône
    • Enfin, si la date de ma cellule est un jour férié, je met un libellé servant de "cadre" en couleur de fond rouge


    Bref, tout ca pour chaque cellules de la ZR.

    Au niveau du code de la procédure ca donne un truc de ce genre :

    POUR i=1 A MaZR..Occurence PAS 1
    |
    | Requête SQL qui va chercher mes données pour une cellule
    |
    | Met les valeurs récupérées dans la celulle (Attribut de la ZR = valeur requête)
    |
    | Met en forme ma cellule : procédure MiseEnForme(i)
    |
    FIN

    Comme ca, voyez-vous une possibilité d'amélioration ?

    Si besoin, je peux expliquer un peu plus en détail certaines parties de ma question

    Merci d'avance !

  2. #2
    Membre actif
    Homme Profil pro
    Développeur WEB - Admin Réseaux
    Inscrit en
    Décembre 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Développeur WEB - Admin Réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 153
    Points : 286
    Points
    286
    Par défaut
    Bonjour,

    Je pense qu'il faudrait que tu essaye de lancer une seule fois ta requête plutôt que de la lancer à chaque fois, si c'est possible.

    Tu pourrais par exemple lancer ta requête qui ramène tout les enregistrements dont tu as besoin pour toutes tes cellules.
    Chaque lignes ramenés par ta requête correspondrait à chaque cellules de ta ZR.

    Ensuite tu copie les lignes dans un tableau a deux dimensions avec les lignes de ce tableau correspondantes au cellules et les colonnes correspondantes au données de chaque cellules et tu ferme ta requête.
    Après dans ton traitement tu va lire chaque lignes du tableau et en fonction des données de chaque lignes tu remplie ou modifie la cellule correspondante de ta ZR.

    En faisant cela tu réduira le nombre d'appel à ta base de donnée (1 seul appel plutôt que X appel) et je pense que tu peux gagner en temps.

    Sinon tu peux nous donner un bout de code qu'on voit s'il n'y a pas d'autre chose à améliorer.

    Bon dev

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Août 2009
    Messages : 97
    Points : 59
    Points
    59
    Par défaut
    Pour la requête, j'y avais déjà pensé mais je n'ai pas la possibilité de la modifier.

    Le résultat comporte au maximum 3 lignes et je fais un ORDER BY .... DESC LIMIT 1.
    Du coup, pas possible de faire une requête qui va tout chercher en une seule fois

  4. #4
    Membre actif
    Homme Profil pro
    Développeur WEB - Admin Réseaux
    Inscrit en
    Décembre 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Développeur WEB - Admin Réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 153
    Points : 286
    Points
    286
    Par défaut
    Dommage pour la requête.

    Via l'analyseur de performance est ce que tu peux voir qu'est qui, dans ta procédure de mise en forme, est long ou répété souvent?

    Est que tu aurais un bout de code de cette procédure?

  5. #5
    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
    Comme mon collègue, ma première réaction, c'est de lancer la requête une seule fois. L'analyseur de performance devrait te confirmer cela, ou donner une autre piste.
    Et je ne suis pas du tout convaincu par l'argument : 'non, je suis obligé de la lancer n fois'.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    Par défaut
    Salut,

    Moi je suis d'accord avec mes collègues. Il te faut retravailler ta requête afin de gagner en temps de réponse. le temps de calcul processeur sera plus rapide que des allers retours sur le réseau.

    Si tu ne veux pas la refaire, tu peux toujours opter pour un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ZR..AffichageActif = faux
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fenetre..AffichageActif = faux
    . N'oublie pas de les remettre à vrai en fin de traitement.

    Philippe
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

Discussions similaires

  1. [WM18] Problèmé mise a jour zone répétée sous ios ?
    Par nico78 dans le forum Windev Mobile
    Réponses: 1
    Dernier message: 21/10/2013, 16h25
  2. [AC-2003] Mise en forme zone de texte
    Par Aurox dans le forum IHM
    Réponses: 2
    Dernier message: 02/05/2011, 17h43
  3. Mise en forme conditionelle zone de texte
    Par nicoach dans le forum Excel
    Réponses: 10
    Dernier message: 28/01/2008, 21h39
  4. Zone de liste avec mise en forme conditionel
    Par sakia dans le forum IHM
    Réponses: 1
    Dernier message: 19/09/2007, 03h07
  5. Réponses: 1
    Dernier message: 05/06/2007, 10h34

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