Selectionner un enregistrement de DB "au hazard" [Résolu]

Signaler
Messages postés
5
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
16 septembre 2005
-
Messages postés
294
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
9 mars 2006
-
Bonjour,
J'essaie depuis un moment de simuler un tirage au sort sur les enregistrements de ma DB.
Pour ce faire, j'utilise le champ Numero de la table.
Je veux donc que lors d'un clic sur un bouton, un numero d'enregistrement soit choisi parmi ceux contenus dans la DB.

Voilà le code que j'utilise pour cela :


Dim aleatoire As Integer
Dim Conn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim maTable As String

maTable = "Clients"

With Conn
.Provider = "Microsoft.JET.OLEDB.4.0"
.Open "C:\clients.mdb"
End With
SQL = "SELECT * From Clients "
Set rst = New ADODB.Recordset
rst.ActiveConnection = Conn
rst.CursorType = adOpenKeyset
rst.LockType = adLockOptimistic
rst.Source = SQL
rst.Open

Randomize

aleatoire = Int(1 + (rst.Fields("Numero").Value * Rnd))
Text1.Text = aleatoire


Le problème est que lors du clic, j'ai toujours le chiffre 1 dans la textbox...
Qu'ai je mal fait pour que cela ne fonctionne pas.
Merci de m'aider.

6 réponses

Messages postés
5
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
16 septembre 2005

Alors voilà, j'ai juste ajouté un petit
rst.MoveLast
Dans le code et le tout fonctionne très bien ;)
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 123 internautes nous ont dit merci ce mois-ci

Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
23
Voila ce que tu fait ...
1- Tu ouvres ton recordset rst : Très bien
2- tu initialises le générateur de nombres pseudo-aléatoire par randomize : Très bien
3- tu tires un nombre pseudo-aléatoire entre 1 et la valeur contenu dans le champ "Numero" de l'enregistrement courant de rst : Pas bien !!!
En effet, le 1er enregistrement que te retourne ta requete est toujours le même, donc son champ numero est toujorus le même : Ne serait-ce pas zéro ?? Auquel cas, ton rnd te renvoi un nombre aléatoire compris entre 0 et ... 0 ... soit entre 0 et 0 !!!!!!
Au lieu de "rst.Fields("Numero").Value", il faudrait que tu mettes le plus grand numero possible dans la table !!

Christophe
Messages postés
5
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
16 septembre 2005

Le problème est que justement, je ne peux définir le nombre d'enregistrement maximum de la table car elle est en perpetuelle augmentation.
Je veux donc que le chiffre soit compris entre 1 et le plus grand nombre de la table actuellement.
C'est sur ce plus grand nombre actuel que je bute.
Je ne sais pas comment le sortir pour l'utiliser dans la fonction.
Messages postés
294
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
9 mars 2006
1
<TD id=HB_Focus_Element vAlign=top width="100%" background="" height=250 body UNSELECTAB<>mais, si le numéro est une s'incrémente parapor aux enregistrements (tuples), pourquoi ne pas a chaque fois compter le nombre de tuple, et se sera le numéro le plus grand.
Messages postés
1788
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
11 mars 2006
23
Bonjour,
Je viens d'essayer ton code avec la BD Biblio.mdb qui se trouve dans vb98 et celà fonctionne. Essaie et compare avec ton code.

Private Sub Command1_Click()
Dim aleatoire As Integer
Dim Conn As New ADODB.Connection
Dim rst As New ADODB.Recordset
'Dim maTable As String
Dim SQL As String
'maTable = "Clients"
'A quoi sert maTable??
With Conn
.Provider = "Microsoft.JET.OLEDB.3.51"
.Open "C:\Program Files\Microsoft Visual Studio\vb98\Biblio.mdb"
End With
SQL = "SELECT * From [Title Author] "
Set rst = New ADODB.Recordset
rst.ActiveConnection = Conn
rst.CursorType = adOpenKeyset
rst.LockType = adLockOptimistic
rst.Source = SQL
rst.Open


Randomize

aleatoire = Int(1 + (rst.Fields("Au_ID").Value * Rnd))
Text1.Text = aleatoire


End Sub

jpleroisse
Messages postés
294
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
9 mars 2006
1
ksper92, je me trompe peut etre, mais, le dernier enregistrement ne contient pas forcement le


plus grand nombre. il ne faudrait pas dabord trier la requete par ordre croissant sur le numéro?


merci de me répondre si tu penses que c'est inutile


<TD id=HB_Focus_Element vAlign=top width="100%" background="" height=250 body UNSELECTAB<>