Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access
Access Forum d'entraide sur Microsoft Access. Avant de poster -> La F.A.Q Access
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Discussion fermée Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/01/2008, 15h42   #1
Membre régulier
 
Avatar de kumo
 
Étudiant
Inscription : mai 2007
Messages : 215
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 215
Points : 91
Points : 91
Envoyer un message via MSN à kumo
Par défaut selection aléatoire d'un enregistrement

bonjour,
je suis entrain de creer une appli delphi qui va attaquer une base access.
Je voudrais savoir comment faire pour, quand je clique sur un bouton qu'il aille me chercher un enregistrement aléatoirement (random) dans la table concernée et qu'il m'affiche dans une zone de texte.
Par exemple:
j'ai une table des molécules avec les champs formule, libellé, masse molaire, image de la molécule
Je voudrais que dans mon appli delphi, quand je clique sur le bouton random par exemple, il me mette le libellé de la molécule choisie au hasard parmis tous les enregistrements dans une zone de texte..

Quelqu'un pourrait m'aider s'il vous plait?

edit: peut etre que la fonction random choisit un chiffre parmis le nombre d'enregistrement et grace a une requete sql, je dis qu'il faut prendre la ligne numéro X dans la table (X etant le resultat de la fonction random)......
kumo est déconnecté   Envoyer un message privé 00
Vieux 07/01/2008, 15h49   #2
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 884
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 884
Points : 10 740
Points : 10 740
Envoyer un message via MSN à jpcheck
salut,
tu peux effectivement voir Random, Rand, Rnd (fonctions qui évoluent selon les langages il me semble), auquel cas tu peux les appliquer si tu as une clé primaire de type numérique (ou numéroauto).
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est actuellement connecté   Envoyer un message privé 00
Vieux 07/01/2008, 15h52   #3
Membre régulier
 
Avatar de kumo
 
Étudiant
Inscription : mai 2007
Messages : 215
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 215
Points : 91
Points : 91
Envoyer un message via MSN à kumo
oui j'y es pensé aussi, mais je n'ai pas d'identifiant auto increment, sinon dans ma requete j'aurai mis select... from... where IdentifiantDeMaTable=ResultatDeMaRequeteRandom


mais je n'ai pas d'auto increment
kumo est déconnecté   Envoyer un message privé 00
Vieux 07/01/2008, 15h55   #4
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 884
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 884
Points : 10 740
Points : 10 740
Envoyer un message via MSN à jpcheck
auter méthode alors,
tu fais dans l'idée :
- requête select *
- RS.movelast
- RS.RecordCount
- Random sur ce recordcount
- activation de l'enregistrement random.
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est actuellement connecté   Envoyer un message privé 00
Vieux 07/01/2008, 16h00   #5
Membre régulier
 
Avatar de kumo
 
Étudiant
Inscription : mai 2007
Messages : 215
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 215
Points : 91
Points : 91
Envoyer un message via MSN à kumo
je comprends pas comment va être ma requete
comment je dois mettre la ligne

Code :
1
2
3
select libellé
from TableMolécule
where laLigne= Random(TableMolécule.RecordCount)
commme ça??
kumo est déconnecté   Envoyer un message privé 00
Vieux 07/01/2008, 16h01   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 360
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 360
Points : 29 280
Points : 29 280
Petite précision que je n'ai pas vue la fonction Random donne un résultat compris entre 0 et 1.
Il faut obligatoirement passer par une fonction ou autre qui va renvoyer le produit de la valeur "Random" par le nombre d'enregistrement.
Ce produit devra être arrondi.

__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est actuellement connecté   Envoyer un message privé 00
Vieux 07/01/2008, 16h05   #7
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 360
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 360
Points : 29 280
Points : 29 280
Devrait le faire.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est actuellement connecté   Envoyer un message privé 00
Vieux 07/01/2008, 16h06   #8
Membre régulier
 
Avatar de kumo
 
Étudiant
Inscription : mai 2007
Messages : 215
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 215
Points : 91
Points : 91
Envoyer un message via MSN à kumo
oui mais si j'utilise la fonction random de delphi ça le fait
mais comment faut que je construise ma requête dans ce cas...

je comprends plus comment fonctionne ton rnd,
Rnd(xxx.Recordcount)...ça fait quoi exactement cette fonction, et le "xxx" c'est le nom de ma table c'est ça?
dans ce cas faudrait que je mette quoi dans ma requete
select libelle from Matable where ..?
kumo est déconnecté   Envoyer un message privé 00
Vieux 07/01/2008, 16h13   #9
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 884
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 884
Points : 10 740
Points : 10 740
Envoyer un message via MSN à jpcheck
salut, xxx est le nom du recordset,
tu fais
Code :
1
2
3
4
rs.MoveLast
A = Rnd(rs.RecordCount)
'puis un 
Me.record.move A
à adapter selon tes données initiales.
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est actuellement connecté   Envoyer un message privé 00
Vieux 07/01/2008, 16h18   #10
Membre régulier
 
Avatar de kumo
 
Étudiant
Inscription : mai 2007
Messages : 215
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 215
Points : 91
Points : 91
Envoyer un message via MSN à kumo
ouaaah, j'y comprends pas grand chose...
je suis debutant en faite...
le recordset c'est quoi ?
En faite, je suis sur mon appli delphi et quand je clique sur mon bouton faut qu'il execute un random puis qu'il selectionne la ligne d'enregistrement numéro=resultat du random, donc la avec ce que vous me donnez, je sais plus quoi faire et ou faire... je sais plus a quoi doit ressembler ma requete...
kumo est déconnecté   Envoyer un message privé 00
Vieux 07/01/2008, 16h28   #11
Expert Confirmé
 
Inscription : mai 2005
Messages : 3 419
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 3 419
Points : 3 768
Points : 3 768
Code :
1
2
3
4
 
SELECT TOP 1 champ1
FROM matable
ORDER BY Rnd([ici un champ numérique]);
__________________
Elle est pas belle la vie ?
random est déconnecté   Envoyer un message privé 00
Vieux 07/01/2008, 16h31   #12
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 360
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 360
Points : 29 280
Points : 29 280
Oui, mais la facilité de la chose, il n'a pas de champ numérique !

Pour avoir le RecordCount, il faut avant faire un rs.moveLast

Un peu de lecture sur le DAO
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est actuellement connecté   Envoyer un message privé 00
Vieux 07/01/2008, 16h39   #13
Expert Confirmé
 
Inscription : mai 2005
Messages : 3 419
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 3 419
Points : 3 768
Points : 3 768
qu' a cela ne tienne

il ajoute
Code :
1
2
3
4
5
6
7
8
9
10
11
 
Function hasard() As Double
Static tempo As Variant
If IsEmpty(tempo) Then
Randomize
tempo = Rnd(Time())
Else
tempo = Rnd(tempo)
End If
hasard = tempo
End Function
puis
Code :
1
2
3
4
 
SELECT TOP 1 champ1
FROM matable
ORDER BY hasard();
__________________
Elle est pas belle la vie ?
random est déconnecté   Envoyer un message privé 00
Vieux 07/01/2008, 16h43   #14
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 884
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 884
Points : 10 740
Points : 10 740
Envoyer un message via MSN à jpcheck
[mode je fais mon zeste d'humour] et ca va marcher comme par hasard ? [/mode]

par contre, tu peux nous expliciter ton order by random stp ?
En quoi consiste-t-il ?

Merci d'avance.
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est actuellement connecté   Envoyer un message privé 00
Vieux 07/01/2008, 17h12   #15
Expert Confirmé
 
Inscription : mai 2005
Messages : 3 419
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 3 419
Points : 3 768
Points : 3 768
la clause order by [desc] unevaleur comme tu le sais a pour effet de classer un jeu d'enregistrements sur unevaleur croissante [décroissante]

d'une façon générale on choisit un champ

mais on peut très bien faire order by le résultat d'une fonction et si cette fonction renvoie des nombres au hasard le résultat du classement sera aléatoire ce qui semble être le but poursuivi
__________________
Elle est pas belle la vie ?
random est déconnecté   Envoyer un message privé 00
Vieux 07/01/2008, 17h15   #16
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 884
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 884
Points : 10 740
Points : 10 740
Envoyer un message via MSN à jpcheck
merci pour cette info

kumo, avec ca tu t'en sors ?
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est actuellement connecté   Envoyer un message privé 00
Vieux 07/01/2008, 17h45   #17
Membre régulier
 
Avatar de kumo
 
Étudiant
Inscription : mai 2007
Messages : 215
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 215
Points : 91
Points : 91
Envoyer un message via MSN à kumo
je n'arrive pas à comprendre, d'apres ce que je comprends là, la requête se fait dans access, mais moi ma requete c'est dans delphi que je dois la faire ...
kumo est déconnecté   Envoyer un message privé 00
Vieux 07/01/2008, 19h31   #18
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 597
Points : 1 597
bonjour,

Sauf erreur, le code de random ne fonctionne que si on passe un argument non constant à la fonction :
Code :
1
2
3
4
5
6
7
8
9
10
11
Function hasard(vCh as Variant) As Double
Static tempo As Variant
If IsEmpty(tempo) Then
Randomize
tempo = Rnd(Time())
Else
tempo = Rnd(tempo)
End If
hasard = tempo
End Function
Code :
1
2
3
4
SELECT TOP 1 champ1
FROM matable
ORDER BY hasard([champ1])
amicalement,

Philippe
philben est déconnecté   Envoyer un message privé 00
Vieux 07/01/2008, 20h51   #19
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 202
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 202
Points : 14 410
Points : 14 410
Envoyer un message via Skype™ à Pierre Fauconnier
Bonsoir

Citation:
Envoyé par kumo Voir le message
je n'arrive pas à comprendre, d'apres ce que je comprends là, la requête se fait dans access, mais moi ma requete c'est dans delphi que je dois la faire ...
Je n'ai pas trouvé de possibilité d'utiliser rnd dans une requête sql qui ne renvoie pas tout le temps la même valeur via Delphi.

A priori, je ne vois que la solution suivante, en delphi:
1. déterminer un nombre aléatoire I entre 1 et le nombre d'enregistrements de la requête
2. Itérer par rs.movenext dans une boucle en Delphi jusqu'à la valeur de I.

Ta demande étant spécifiquement sql, je te conseille d'aller sur le forum du langage sql pour poser ta question.

Bonne continuation
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est déconnecté   Envoyer un message privé 00
Discussion fermée Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h08.


 
 
 
 
Partenaires

Hébergement Web