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

HyperFileSQL Discussion :

tri les enregistrements retournée par une requête


Sujet :

HyperFileSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Par défaut tri les enregistrements retournée par une requête
    J'ai un petit soucis pour gérer les enregistrement retournée par une requête et j'ai besoin d'une petite aide svp.

    j'explique ,je cherche à trier des enregistrements retournée par une requête et les classées dans une table par bloc des pages ,lors de chargements de n premiers enregistrements le tri se fait parfaitement mais le problème se pose si je parcours ma requête pour afficher les restes des pages , j'ai constaté que les résultats ne garde pas le même tri renseigné dans le clause "ORDER BY".

    Alors le question qui se pose Comment je peux garder le trié des résultats d'une requête pendant toute la période de sa exécution ?

  2. #2
    Membre Expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 915
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 915
    Par défaut
    Bonjour, ( un petit bonjour aurais été gentil soit dit en passant)

    Et bienvenue sur ce forum.
    En ce qui concerne ton problème peux tu nous donner plus de détails.

    Quand tu explique que tu veux "trier des enregistrements retournée par une requête" tu veux le faire comment? par programmation avec les ordres SQL (Order by, etc...)

    Qu'entends tu par "table par bloc des pages" ?

    Tu dis que ça marche plus lorsque tu "parcours ma requête pour afficher les restes des pages"

    Comment fais tu ce parcours ?

    Donne le plus de précision possible.
    Ce que tu appel table est-ce un champ table ou un fichier d'une base de donnée?
    Si tu exécute ta requête dans l'éditeur de requête, est-elle correcte?

  3. #3
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Par défaut
    Bonjour,
    Tout d'abord je te remercie pour ta réponse rapide et je suis désolé pour l'absence d'expression de politesse
    En fait, je suis entrain d'afficher les résultat d'une recherche dans une Table. Or il ne s'agit pas de tous les résultat car le chargement de tous les enregistrements nécessite un temps considérable, c'est pourquoi je n'affiche que 20 enregistrement et laisse le choix à l'utilisateur de voir le reste des résultat en sélectionnant une page bien déterminée (Comme c'est le cas d'une recherche Google !)
    Mon problème c'est que je désire effectuer le tri sans recourir à la ré-exécution de la requête. J'aimerai bien faire le tri dans ma source de données.
    Est ce que c'est possible d'après vous car j'ai bien cherché mais en vain.
    Il y a une autre piste que je suis en train d'explorer maintenant, il s'agit d'utiliser les Vues. Mais j'arrive pas à connecter une vue à une requête.
    J'espère bien que tu as bien saisi mon problème. Je serai reconnaissant si tu pourra m'aider à le résoudre.
    Merci encore.
    Bien cordialement

  4. #4
    Membre Expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 915
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 915
    Par défaut
    Pas de souci pour le bonjour...

    Comment affiche tu que 20 enregistrement?
    Quel code utilise tu pour afficher les autres?

    Peux tu nous le donner?

  5. #5
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Par défaut
    1)Actuellement j'utilise ce boucle qui me retourne les résultats que je veux mais non triée
    par exple gnMin=1 et gnMax=20 :pour afficher les 20 premier enregistrement

    POUR i=gnMin A gnMax

    HLit(SdMaRequete_CONTACTS,i)
    TableAjouteLigne(TABLE_CONTACTS,SdMaRequete_CONTACTS.tiers

    fin

    2)par contre ce 2ème boucle me retoune tout les enregistrements de la reqête sans limites(je veux pas sa) et bien triée (c'est sa que je cherche d'être triée)

    Pour tout SdMaRequete_CONTACTS

    TableAjouteLigne(TABLE_CONTACTS,SdMaRequete_CONTACTS.tiers

    Fin

    comment je peux utiliser le 2ème boucle on le passant les bornes gnMin et gnMax pour afficher que les enregistrement voulu et bien triée.

  6. #6
    Membre Expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 915
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 915
    Par défaut
    Une solution serai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    i est entier = 1
    Pour tout SdMaRequete_CONTACTS
     
    TableAjouteLigne(TABLE_CONTACTS,SdMaRequete_CONTACTS.tiers 
     
    i++
    si i = gnMax alors sortir
     
    Fin
    ainsi tu lis ta requête et tu sors de ta boucle quand i vaut gnmax

  7. #7
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Par défaut
    Bonjour à vous deux.
    D'abord j'ai une question : tu travailles bien en Windev ? (pas Webdev ni Windev mobile) ?
    Si oui, quelle version de Windev ?
    Je vais répondre à la suite comme si tu étais en windev.
    Le tri dans la requête, c'est bien ORDER BY à la fin, dans le code SQL.
    Pour afficher des blocs de données, tu peux utiliser la clause LIMIT, toujours en SQL.

    Parce que ce que tu fais actuellement, c'est que tu charges la totalité de tes enregistrements dans une source de données (donc en local, dans le programme).

    Mais pour le problème de lenteur d'affichage par contre, je ne suis pas sûr que ça soit la meilleure solution. En effet, pour un utilisateur, savoir s'il doit aller à la page 10 ou 11 relève un peu du hasard.
    Je te conseillerais donc d'utiliser l'instruction MultiTache(-1)
    Elle rend la main à l'utilisateur, et il peut intervenir et commencer à regarder ses données.

    C'est en tous cas la solution que j'utilise.

    Un exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SI HLitPremier(sdMaRequete) ALORS
        BOUCLE
            MultiTache(-1)
            TableAjouteLigne(TABLE_CONTACTS,sdMaRequete_CONTACTS.tiers)
        A FAIRE TANTQUE HLitSuivant(sdMaRequete)
    FIN
    La table se charge et l'utilisateur conserve la main.

    Attention tout de même à une chose : pendant ce traitement, l'utilisateur peut utiliser la totalité de l'application. Il peut donc par exemple, recliquer sur le bouton qui a lancé ce code.

    Une méthode simple consiste donc à griser le bouton pendant le traitement, et le ré-activer ensuite.

Discussions similaires

  1. [PDO] compter les lignes retournées par une requête SELECT
    Par laurentSc dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/01/2015, 14h40
  2. Réponses: 3
    Dernier message: 16/08/2006, 16h05
  3. traiter les groupes retourné par la requête GROUP BY
    Par mgemc2 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 16/08/2006, 13h16
  4. Réponses: 2
    Dernier message: 07/07/2006, 01h26
  5. [SQL] Valeur retournée par une requête...
    Par Empty_body dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 04/01/2006, 22h13

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