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

Access Discussion :

[Access] Problème de tri non réalisé à la création d'une table [AC-2003]


Sujet :

Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut [Access] Problème de tri non réalisé à la création d'une table
    Bonjour à tous,

    J'ai un problème particulier et non récurent.

    A la création d'une table je réalise 2 tris, un sur le numéro de commande et un sur le numéro de ligne :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Base_Temp.Order_Number, Base_Temp.OrderItem_Number, Base_Temp.Code_error_dash INTO base_temp_old
    FROM Base_Temp
    ORDER BY Base_Temp.Order_Number, Base_Temp.OrderItem_Number;

    La requête est très simple et me semble bonne mais il arrive que la table résultante ne soit pas trié correctement ... les numéros de commandes ne se suivent pas :

    Order_Number OrderItem_Number
    1726899 30
    1726899 30
    1726899 30
    1726899 30
    1734133 190
    1734133 250
    1734133 410
    1734133 420
    1734133 430
    1734133 690
    1743002 10
    1751257 421
    1755435 450
    1755435 540
    1755435 570
    1755435 580
    1428894 280
    1429766 130
    1434858 10
    1434858 10
    1434858 10
    1503042 300
    1503042 300
    1524594 15
    1524594 110
    1524594 220
    1524594 290

    Les lignes ci dessous sont les premières lignes de ma table lors de l'échec de création, les commandes 1726899 à 1755435 se retrouvent en premières alors qu'il y a des commandes 1400000 à 1600000 et les commandes vont jusqu'à 1900000 donc ce ne sont même pas les dernières qui se serait retrouvé premières.

    Je suis ouvert à toutes les idées et remarques pour déterminer la cause de ce problème.

    Bonne journée,
    Cordialement,
    Ludovic

  2. #2
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Bonjour,

    Es-tu sûr de ne pas avoir un caractère invisible devant ton numéro de commande 1428894 ? Le problème typique est la présence d'un espace.

    Quel type de donnée manipules-tu ? Order_Number = Texte ou Nombre ?

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour,

    Le tri des donnees n'est pas garanti dans une table. Generalement il correspond a l'ordre de creation des enregistrements mais pas forcement.
    Souvent les donnees sont presentees dans l'ordre de la clef primaire mais la aussi ce n'est pas certain.

    La seule solution pour garantir l'ordre est de passer par une requete de tri, un truc du genre :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select [TaTable].* from [TaTable] order by [TaTable].[TonChamp]

    Note ceci est vrai aussi pour les requetes GROUP BY. Generalement les donnees sont presentees dans l'ordre croissant mais ce n'est pas certain. La aussi il faut definir un odre de tri dans la requete pour s'assurer de l'avoir comme on veut.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    @PipoWIL :
    Il n'y a pas d'espace ni en début, ni en fin de numéro.
    Et mon Order_Number est un type texte.

    @marot_r :
    Je fais déjà l'ORDER BY

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Base_Temp.Order_Number, Base_Temp.OrderItem_Number, Base_Temp.Code_error_dash INTO base_temp_old
    FROM Base_Temp
    ORDER BY Base_Temp.Order_Number, Base_Temp.OrderItem_Number;

    Si je fait un affichage de type sélection des données sans créer la table j'ai à chaque fois ma table dans l'ordre désiré, mais au moment d'en créer une (ce qui revient à faire une copie dans l'ordre qui m'intéresse) l'ordre n'est plus du tout le même...

  5. #5
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Salut,

    Tu peux toujours essayer de rendre ton statment SQL plus explicite en rajoutant ASC mais , normalement, cela ne devrait rien changer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Base_Temp.Order_Number, Base_Temp.OrderItem_Number, Base_Temp.Code_error_dash INTO base_temp_old
    FROM Base_Temp
    ORDER BY Base_Temp.Order_Number ASC, Base_Temp.OrderItem_Number ASC;
    Essaye, tu veras si cela change qqch. (J'en doute...)

    Autre solution en te basant sur le commentaire de Marot, tu peux toujours faire une requete simple avec ton tri puis faire une deuxième requete de creation de table qui prendrait la premiere requette comme source. (Pfff, c'est lourd....)


    Je pense aussi que tu aurais intérêt à t'inquiéter sur la qualité de tes données. As-tu une bonne raison pour avoir tes numéros de commande au format texte alors que ce sont des numéros ? Tu peux essayer ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CLng([Order_Number]) AS Order_Nbr, CLng([OrderItem_Number]) AS OrderItem_Nbr, Base_Temp.Code_error_dash INTO NouvelleTable
    FROM Base_Temp;
    Cela te permettra peut-etre de mettre en évidence la presence de caractères invisibles. Maintenant que tu as tes commandes en format nombre, réessaye ta requête de tri sur la nouvelle table.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Si je fait un affichage de type sélection des données sans créer la table j'ai à chaque fois ma table dans l'ordre désiré, mais au moment d'en créer une (ce qui revient à faire une copie dans l'ordre qui m'intéresse) l'ordre n'est plus du tout le même...
    Comme je l'ai dit, l'ordre dans une table n'est pas garanti. Donc, une fois ta table créée, pour être sur d'avoir les enregistrements dans l'ordre voulu, il faut faire une requête basée sur cette table.

    Tu peux aussi vérifier les paramètres de tri associé à la table, un fois que tu as fais un tri sur une table Access le garde et s'en resserre. Ceci ne change rien à mon point précédent.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Ça devrait être quelque chose comme
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT base_temp_old.* from base_temp_old
    ORDER BY base_temp_old.Order_Number, base_temp_old.OrderItem_Number;

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 95
    Points : 133
    Points
    133
    Par défaut
    Bonsoir,
    cela n'aura peut être pas d'impact mais c'est à tester. Perso, j'aurais rédigé ma requête différemment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO base_temp (Order_Number, OrderItem_Number, Code_error_dash) 
    SELECT Order_Number, OrderItem_Number, Code_error_dash FROM base_temp_old
    ORDER BY Order_Number, OrderItem_Number;
    Autre piste, en tant que champ text, vérifier si order_number est bien "indexé".

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Tout d'abord, merci à tous pour vos réponses.

    J'ai essayé le changement du format, de texte à long, ce ne fut pas très concluant, le problème de tri à l'air d'arriver un peu moins souvent. Mais il peut arriver que le numéro de commande contienne une (ou plusieures) lettre(s), par exemple 574656T55. Si je passe le champ au format long cet enregistrement risque de sauter, et en texte, il sera au moins à la fin avec toutes les lettres.

    Le problème que j'ai avec cette table, c'est que je travaille dessus ensuite en VBA et que je fait des comparaisons entre des très grosses tables. Pour diminuer mon temps de traitement je balaye de A à Z toutes les tables en même temps pour éviter de faire Y*X*T balayages, donc l'ordre doit être absolument le même.

    La solution lourde de PipoWIL (une requête de création qui appelle une requête de sélection) semble très prometeuse, après plusieurs tests je n'ai pas eu de problème de table non triée

    Je vais voir si durant l'exécution automatique demain matin tout se passe bien.

    Bonne journée,
    Cordialement,
    Ludovic

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Après une semaine d'utilisation, la solution de PipoWIL fonctionne à merveille !

    Merci à tous !

    Bonne continuation,
    Ludovic

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

Discussions similaires

  1. Création d'une table - Problème....
    Par JoN28fr dans le forum Débuter
    Réponses: 7
    Dernier message: 13/11/2008, 20h27
  2. [Tables Access] Problème avec AUTO_INCREMENT non reconnu
    Par GuixInDaMixx dans le forum VB.NET
    Réponses: 4
    Dernier message: 15/05/2008, 18h01
  3. Réponses: 8
    Dernier message: 06/06/2007, 17h03
  4. Réponses: 8
    Dernier message: 09/05/2006, 11h08
  5. [VB.NET] création d'une table dans une base access
    Par smedini dans le forum Accès aux données
    Réponses: 1
    Dernier message: 31/12/2005, 11h53

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