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

VBA Access Discussion :

Recordset et tri pour un champ numérique [AC-2000]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 41
    Points
    41
    Par défaut Recordset et tri pour un champ numérique
    Bonjour,

    Pour écrire dans un fichier texte j'utilise un recordset. Je souhaite que les lignes de mon fichier texte soit triées par "Style" puis par "Part" puis par "Length" en sachant que part et length sont des champs numérique. J'ai le code 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
    24
    25
    26
    27
    28
    29
    30
    On Error GoTo Err_Fichier_débit_Click
    DoCmd.RunSQL "CREATE TABLE [TEMP_Export débit] ([Numéro de débit] COUNTER,[Name] TEXT(50),[Part] TEXT(50),[Length] TEXT(50),[Style] TEXT(50),[Stripping Type] TEXT(50),[Right Strip] TEXT(50),[Left Strip] TEXT(50),PRIMARY KEY ([Numéro de débit]));"
     
    DoCmd.RunSQL "INSERT INTO [TEMP_Export débit] ( Name, Part, Length, Style, [Stripping Type], [Right Strip], [Left Strip] ) SELECT [16-P-Fichier de débit].Name, [16-P-Fichier de débit].Part, [16-P-Fichier de débit].Length, [16-P-Fichier de débit].Style, [16-P-Fichier de débit].[Stripping Type], [16-P-Fichier de débit].[Right Strip], [16-P-Fichier de débit].[Left Strip] FROM [16-P-Fichier de débit] ORDER BY [16-P-Fichier de débit].Style, [16-P-Fichier de débit].Part, [16-P-Fichier de débit].Length;"
     
    Set Rs = CurrentDb.OpenRecordset("SELECT * FROM [TEMP_Export débit] [16-P-Fichier de débit].Style, [16-P-Fichier de débit].Part, [16-P-Fichier de débit].Length;", dbOpenSnapshot)
     
    Open Chemin_long For Output As #1
     
    Print #1, "Import" & Chr(Sep) & "ASCII"
    Print #1, "Units" & Chr(Sep) & "mm"
    Print #1, "Name" & Chr(Sep) & "Part" & Chr(Sep) & "Length" & Chr(Sep) & "Style" & Chr(Sep) & "Stripping type" & Chr(Sep) & "Right Strip" & Chr(Sep) & "Left Strip"
     
    While Not Rs.EOF
        Print #1, Rs.Fields("Name").Value & Chr(Sep) & _
                  Rs.Fields("Part").Value & Chr(Sep) & _
                  Rs.Fields("Length").Value & Chr(Sep) & _
                  Rs.Fields("Style").Value & Chr(Sep) & _
                  Rs.Fields("Stripping type").Value & Chr(Sep) & _
                  Rs.Fields("Right Strip").Value & Chr(Sep) & _
                  Rs.Fields("Left Strip").Value, Chr(Sep)
        Rs.MoveNext
     
    Wend
     
    Rs.Close
    Set Rs = Nothing
    Close #1
     
    DoCmd.RunSQL "DROP TABLE [TEMP_Export débit]"
    Comme vous pouvez le voir je trie lors de l'ajout à la la table temporaire et lors de la création du recordset.
    La table est triée comme voulu mais lors de l'écriture il semble que le recordset trie Part comme un champ texte (21 avant 3 par exemple).
    En enlevant le critère de tri lors de la création du recordset l'ordre de la table n'est pas respecter et c'est l'anarchie.

    Comment faire pour garder le tri de la table ou pour trier le recordset tel que Part et Length soit triés comme des nombres?

    Merci d'avance aux experts.

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    As-tu essayé de trier en convertissant tes champs en numérique ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORDER BY cInt(Part) .....

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 41
    Points
    41
    Par défaut
    J'ai remplacé ma ligne par celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rs = CurrentDb.OpenRecordset("SELECT * FROM [TEMP_Export débit] ORDER BY (Style), cInt(Part), cInt(Length);", dbOpenSnapshot)
    Access m'affiche un message d'erreur:
    "Dépacement de capacité"

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 41
    Points
    41
    Par défaut
    Toutes mes excuses, les champs de la table temporaire que j'utilise pour le Recordset étaient tout simplement définis sur TEXT(50).

    Je suis déjà en route pour être flagélé sur la place publique...

    Merci et à bientôt.

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

Discussions similaires

  1. [AC-2003] Ordre croissant pour un champ alpha numérique
    Par pio_killer dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 08/04/2010, 12h06
  2. Le type à choisir pour un champ numérique
    Par xess91 dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 12/01/2010, 14h38
  3. Effectuer des calculs uniquement pour les champs numériques
    Par Daniel MOREAU dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 25/02/2008, 01h26
  4. champs numériques dans un recordset
    Par icoons dans le forum VB.NET
    Réponses: 5
    Dernier message: 14/02/2007, 11h36
  5. format personalisé pour un champ numérique
    Par tzinzin dans le forum Access
    Réponses: 2
    Dernier message: 29/03/2006, 16h56

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