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

Requêtes et SQL. Discussion :

Tri des enregistrement d'une table


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Points : 7
    Points
    7
    Par défaut Tri des enregistrement d'une table
    Bonjour.
    Mon objectif est de mélanger les valeurs d'une de mes tables. Celle ci contient 112 enregistrements et je souhaite les mélanger pour que ces enregistrements ne soient plus rangés par ordre croissant (par rapport au NumeroAuto)
    J'ai donc trouver cette solution:
    Ceci dans un nouveau module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function Randomizer() As Integer
    Static AlreadyDone As Integer
         If AlreadyDone = False Then Randomize: AlreadyDone = True
    Randomizer = 0
    End Function
    et ceci dans une requête SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TOP 112 TableCarte.*
    FROM TableCarte
    WHERE randomizer()=0
    ORDER BY rnd(isnull(TableCarte.clef)*0+1);
    Alors j'ai bien un mélange qui s'effectue mais il subsiste 2 questions:
    -Quand je valide la requête, une fenêtre n'affiche pour me demander d'entrer la valeur du paramètre "TableCarte.clef". A quoi correspond cette question?
    -Je peux mettre différentes valeurs et j'obtient toujours le même ordre de mélange, c'est a dire que même si je ferme access puis le relance, j'ai le même tri. Comment faire pour en avoir un différent a chaque fois que je lance la requête?

    Merci de votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,
    personnellement j'opterai pour la création d'une table temporaire récupérant les 112 cartes.
    Les champs NuméroAuto par défaut sont en mode autoincrement mais ils peuvent être placés en mode aléatoire. Ce mode se sert de la fonction Rnd() pour établir la plage de valeurs à générer pour les nouveaux enregistrements.
    Dans ton cas, je me baserai sur une fonction ou deux requêtes qui 1) vide la table temporaire si elle ne l'est pas déjà, 2) copie les 112 cartes dans cette table ayant pour clé primaire un champ numéroauto aléatoire. Ainsi, à chaque appel, les cartes auront une clé aléatoire dans la table temporaire, quelque soit ensuite le tri appliqué tu ne peux prévoir l'ordre des cartes.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Merci de répondre et de proposer une solution à mon problème, mais à vrai dire, je suis un novice a access. Donc je t'avoue ne pas trop savoir comment m'y prendre, même si je comprends ton idée directrice.
    C'est a dire que je dois créer une table similaire à celle où il y a les 112 enregistrements puis la remplir grâce a un code qui transférera les valeur de façon aléatoire dans cette table. Mais comment procéder, car je ne sais même pas créer un code pour une table ( les boutons sur formulaire etc ok, mais la je ne sais pas pas quoi commencer)

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Ok, pour être clair peux-tu me donner le nom de la table ainsi que le nom des champs qu'elle contient.
    En attendant voici un exemple :

    Une table TblCartes qui contient 3 champs :
    - Clef : clé primaire (numéroauto)
    - Couleur : la couleur de la carte
    - Valeur : la valeur de la carte
    Pour effectuer un tirage aléatoire je crée une nouvelle table identique à tblCartes TblMelange excepté la propriété Nouvelles Valeurs de la clé primaire.
    - Clef : Clé primaire (numéroauto - Nouvelles valeurs : aléatoire)
    - Couleur : la couleur de la carte
    - Valeur : la valeur de la carte

    Maintenant, je crée un formulaire sur lequel je place un bouton pour effectuer un mélange. J'appelle le bouton CmdMelange. Puis j'écris ce code pour le bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CmdMelange_Click()
     'Vider la table TblMelange avant de procéder
     CurrentDb.Execute "DELETE * FROM TblMelange"
     'Remplis les champs de la table TblMelange
     'Je laisse Access créer les clefs en prenant que les champs Couleur et Valeur
     CurrentDb.Execute "INSERT INTO TblMelange SELECT Couleur, Valeur FROM TblCartes"
    End sub
    Voilà, à chaque clique la table TblMelange est vidée puis remplie des 112 cartes de la table TblCartes, les clefs sont maintenant aléatoires. Que la table TblMelange soit triée par odre croissant ou décroissant, l'ordre de sortie est toujours différent.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Alors ma table est "TableCarte" possédant les champs suivants:
    ID_Cartes (NumeroAuto)
    NomCarte
    CouleurCarte
    ValeurCarte

    Donc dans cette table, j'ai 112 enregistrements.
    Ensuite, je crée une nouvelle table "TableMelangeCarte", ayant les meme champs que la précédente. Ensuite, j'écris le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub BtnMelanger2_Click()
    'Vider la table TblMelange avant de procéder
     CurrentDb.Execute "DELETE * FROM TableMelangeCarte"
     'Remplis les champs de la table TblMelange
     'Je laisse Access créer les clefs en prenant que les champs Couleur et Valeur
     CurrentDb.Execute "INSERT INTO TableMelangeCarte SELECT CouleurCarte, Valeurcarte,NomCarte FROM TableCarte"
     
    End Sub
    Sauf que le code me rajoute bien mes cartes dan la nouvelles table mais toujours dans le même ordre que celui de ma première table. Ne faut il pas utiliser la fonction Randomize ?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    As-tu bien précisé pour la clé primaire de la nouvelle table que les nouvelles valeurs devaient être aléatoires et non incrémentés ? Dans la table en mode création/modification, dans les propriétés du champ sous la liste des champs, il y a une proriété Nouvelles Valeurs, choisis aléatoire.
    Si oui, fais un tri sur la clé primaire. Puisque les clés sont aléatoires le tri l'est aussi. Pour éviter de trier à chaque fois, effectue dans la table un tri sur la clé primaire et enregistre la table; le tri est enregistré aussi.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Merci, effectivement j'avais oublier de changer cette option. Je te remercie de ton aide précieuse. C'est gentil de partager tes connaissances.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/08/2006, 23h02
  2. Taille des enregistrements d'une table
    Par Stbaurl dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 11/07/2006, 09h19
  3. Tri des lignes d'une Table via Formulaire
    Par kato dans le forum Access
    Réponses: 3
    Dernier message: 19/04/2006, 12h53
  4. [WD9] Cliquer sur des enregistrements dans une table
    Par oz80 dans le forum WinDev
    Réponses: 2
    Dernier message: 15/12/2005, 20h11
  5. Parcourir l'ensemble des enregistrements d'une table
    Par Aurèl90 dans le forum Access
    Réponses: 17
    Dernier message: 22/09/2005, 14h51

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