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

Bases de données Delphi Discussion :

[ADO - Access]Tri de valeurs alphanumériques un peu spécial


Sujet :

Bases de données Delphi

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut [ADO - Access]Tri de valeurs alphanumériques un peu spécial
    Bonjour,
    Est il possible de modifier l'ordre de tri d'un champ alphanumérique ?
    Je m'explique :

    Disons que j'ai un champ alphanum désignant le numéro de client.
    Exemple :
    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
    23
    24
    N°
    A1
    A2
    A3
    A4
    A5
    A6
    A10
    A12
    A13
    A14
    A115
    A265
    B1
    B2
    B4
    B21
    B32
    B152
    C1
    C12
    C14
    C521
    etc...
    Le problème c'est qu'avec une requête sql, quand je fais un ORDER BY, il me renvoie le résultat suivant :

    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
    23
    N°
    A1
    A10
    A115
    A12
    A13
    A14
    A2
    A265
    A3
    A4
    A5
    A6
    B1
    B152
    B2
    B21
    B32
    B4
    C1
    C12
    C14
    C521
    Le tri est fait sur chaque caractère en gros. Moi j'aimerai avoir le résultat de la première liste.

    Est ce possible ?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut,

    Non il n'y a pas de moyen de modifier l'ordre de tri d'une chaîne alphanumérique. La clause order by fait systématiquement un tri alphabétique donc le résultat de ta 2° liste.

    Une solution consisterait à ajouter un champ à ta table et d'y stocker ton code client reformater pour qu'il renvoie le tri désiré.

    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
     
    N° 
    A001 
    A002 
    A003 
    A004 
    A005 
    A006 
    A010 
    A012 
    A013 
    A014 
    A115 
    A265 
    B001 
    B002 
    B004 
    B021 
    .../...
    Voilà, mais il y a peut-être d'autres solutions...! mais dans l'imédiat je ne vois pas.
    @+

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Avec ce type de requete sous ACCESS seulement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select test from table1
    order by Mid(test,1,1),Cint(Mid(test,2,Len(Nom) -1))

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re-Salut,

    D'accord avec Malatar: sous Access seulement !
    Autre façon de formuler pour le même résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT CodeClient
    FROM Table1
    ORDER BY Left([CodeClient],1) & Format(Mid([CodeClient],2,3),"000");
    @+

    [Edit] A noter que la méthode de Malatar va quelque soit la longueur de ton code client. La mienne pour une longueur maxi de 4 caractères.

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Ha ok, je vois....
    Le problème est que je ne connais pas toutes les façons dont les utilisateurs utilisent cette fonction.

    D'autres vont les classer comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    1
    2
    3
    4
    5
    6
    ....
    ....
    100
    101
    .....
    .....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    D'autre comme ca
    A1
    A2
    A3
    A10
    A15
    ....
    ....
    Ou comme ceci
    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
    A2002C1
    A2002C2
    A2002C3
    A2002C10
    A2002C11
    ....
    ....
    A2004C1
    A2004C2
    A2004C10
    A2004C12
    ....
    ....
    A2005C1
    A2005C2
    A2005C3
    A2005C4
    Donc, voilà ! Je pense qu'il m'est impossible d'avoir un tri cohérent pour chaque logique de classement.
    Donc , c'est à eux de gérer celà au mieux en fixant leur masque de n° client.

    Du genre , je sais que la société possèdent bcp de clients, je vais donc fixer les numéro de clients sur 6 chiffres
    000001
    000002
    000003
    ....
    ....

    Enfin, je pense que c'est la meilleur solution.
    Qu'en pensez-vous ?

    Merci

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Je pense que tu devrais fixé toi même les limites de saisie du code client (Un masque modifiable uniquement par un admin).

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Et paf! re-d'accord avec Malatar !
    Salut.

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    OK, je vais voir de ce coté là.

    Merci à vous deux.

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 144
    Points
    144
    Par défaut difficile et chiant
    Salut
    J'ai eu ce même problème.
    J'ai développé une fonction qui dit à delphi comment comparer deux éléments pour le tri.
    Sur le OnCompare (je crois) tu mets une fonction qui renvoie le résultat de la comparaison. Ce qui est intéressant, c'est l'algo. Si tu veux je peux te le poster. C'est plutot long mais ça marche bien pour trier tout: des numériques purs, des dates et des chaînes "à la con" comme nous avons.
    Veux tu le code?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tri des valeurs dans un DBGrid
    Par soviet dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/06/2015, 15h18
  2. Problème de tri sur date avec ADO - ACCESS
    Par lorenzodelphi dans le forum Bases de données
    Réponses: 1
    Dernier message: 13/09/2013, 09h28
  3. [ADO, Access]_Paramètre ?_2 n'a pas de valeur par défaut?
    Par Gdal dans le forum Accès aux données
    Réponses: 1
    Dernier message: 04/03/2008, 23h19
  4. [D7][ADO][ACCESS] Ordre de tri bizard
    Par aityahia dans le forum Bases de données
    Réponses: 9
    Dernier message: 13/03/2007, 16h59
  5. TB2006perso - ADO/ACCESS - Valeur par défaut
    Par microJaP dans le forum Bases de données
    Réponses: 2
    Dernier message: 15/01/2007, 23h42

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