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 :

Tri tableau / analyse


Sujet :

WinDev

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Février 2014
    Messages : 71
    Points : 55
    Points
    55
    Par défaut Tri tableau / analyse
    Bonjour,

    Je suis face à une problématique :

    J'ai un tableau qui est sensé s'afficher par ordre chronologique exemple :

    Valeur
    1
    2
    3
    4
    5
    6

    Il affiche actuellement :

    Valeur
    6
    5
    4
    3
    2
    1

    En regardant dans ma table de la base de donnée je m’aperçois que mon tableau classe l'affichage en fonction de l'ordre de la colonne N° Enr.
    Hors ma clé unique de tri est IDFABLIG qui sert d'identifiant, d'ailleurs si je regarde directement (via WDMAP) dans la base, toutes les données sont bien triées en fonction de cette colonne.

    Ma table (FABLIG) de la base de données est composées de plusieurs colonnes, celles qui nous intéressent :
    N° Enr. IDFABLIG IDFABENT VALEUR
    15 117 10 1
    14 118 10 2
    13 119 10 3
    12 122 10 4
    11 123 10 5
    10 124 10 6

    On voit bien que la chronologie de la colonne IDFABLIG est appliquée.

    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    HLitRecherche(FABLIG,IDFABENT,FABENT.IDFABENT)
    TANTQUE PAS HEnDehors(FABLIG)
    ...(popote du traitement)
    HLitSuivant(FABLIG,IDFABENT)
    Le code effectue donc une recherche en rapport avec IDFABENT mais au lieu d'appliquer l'ordre donnée par la colonne IDFABLIG il applique celle de la colonne N° Enr.

    Comment résoudre cet problème ?
    Est il possible lors de la création d'une nouvelle entrée dans la table de la base de donnée, d'appliquer le numéro de la dernière position + 1 de la colonne N° Enr. ? Car actuellement c'est le premier numéro de libre qui est attribué.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Analyste developpeur
    Inscrit en
    Octobre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

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

    Informations forums :
    Inscription : Octobre 2017
    Messages : 10
    Points : 21
    Points
    21
    Par défaut
    Oui c'est possible en utilisant idauto mais ce n'est pas la bonne solution pour ton besoin.

    Tu peux passer par une requete pour faire tes recherches en utilisant un ORDER BY sur la clé de tri ou alors par un POUR TOUT avec ton filtre, en precisant la cle de parcours.

    donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    soit smarequete = ChaineConstruit("SELECT * FROM FABLIG WHERE FABLIG.IDFABENT = %1 ORDER BY IDFABLIG",FABENT.IDFABENT)
    MaSource est une source de données
    Hexecuterequetesql(MaSource,smarequete)
    Hlitrecherchepremier(MaSource)
    TANTQUE PAS HEnDehors(MaSource)
    // ton code
    HlitSuivant()
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    soit sfiltre= ChaineConstruit("IDFABENT = %1",FABENT.IDFABENT)
    POUR TOUT FABLIG AVEC sfiltre SUR IDFABLIG
    // CODE DE TON CHOIX
     
    FIN
    je fais ca de tete donc attention a redresser mes erreurs.

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    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 053
    Points : 9 392
    Points
    9 392
    Par défaut
    La solution avec des requêtes est la bonne. Et bien entendu, il faut la clause ORDER BY. Si tu ne mets pas cette clause, tu vas obtenir des résutats qui te paraissent triés comme il faut, parce que souvent, le hasard fait bien les choses. Puis un jour, sans raison évidente, l'ordre ne sera plus respecté. Donc ORDER BY obligatoire.

    Si pour une raison ou une autre, tu ne veux pas utiliser des requêtes, je pense que tu peux passer par un hFiltre() en précisant la clé de filtre, puis hLipremier(), en précisant ici la colonne qui va servir à classer les enregistrements.

    Ici, si je comprends bien, tu as une colonne de type identifiant automatique, et une colonne qui a une vraie signification pour l'utilisateur, et tu dis : C'est bon, ma colonne identifiant automatique donne le même 'ranking' que la colonne d'à côté.

    Attention, c'est une coïncidence. Tu n'as absolument pas l'assurance que ce sera toujours le cas. En général, ça coïncide pendant 6 mois ou 1 an, puis du jour au lendemain sans raison évidente , ça ne coïncide plus (comme pour les tris dans une requête si tu ne précises pas ORDER BY)
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Février 2014
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    Passant derrière mon collègue qui a fait le code, je voulais éviter de passer par une requête (chose que je préfère personnellement dans ce type de cas) ceci afin d’éviter un loupé après ma modif, j’espérais donc une option cachée dans l'analyse où je serai passé à coté... ^^

    Du coup, suite à vos retours je vais passer par une requête.

    Et effectivement avant ce problème tout concordé dans nos nombreux tests au niveau de la chronologie

    Merci

  5. #5
    Membre à l'essai
    Homme Profil pro
    Analyste developpeur
    Inscrit en
    Octobre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

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

    Informations forums :
    Inscription : Octobre 2017
    Messages : 10
    Points : 21
    Points
    21
    Par défaut
    J'ai fondamentalement rien contre les H ordre de windev mais les requêtes sont préférables et de beaucoup en terme de performance globale.

    Pour s'en rendre bien compte, il faut passer par un analyseur mais la plupart des h ordre font des parcours de table contrairement aux requêtes bien faites.

Discussions similaires

  1. [POO] Tri tableau objets
    Par Metallic-84s dans le forum Langage
    Réponses: 4
    Dernier message: 21/02/2006, 19h53
  2. Problème de tri avec analyse croisée
    Par drthodt dans le forum Access
    Réponses: 2
    Dernier message: 18/10/2005, 16h23
  3. algorithme de tri tableau :afficher que les éléments unique
    Par sofiane61 dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 31/03/2005, 19h50
  4. [Débutant] Tri tableau String
    Par Sigwald dans le forum Collection et Stream
    Réponses: 22
    Dernier message: 14/05/2004, 08h55
  5. [langage] TRI TABLEAU ASSOCIATIF
    Par proner dans le forum Langage
    Réponses: 5
    Dernier message: 04/03/2003, 16h38

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