Selectionner un enregistrement de DB "au hazard"

Résolu
cs_ksper92 Messages postés 5 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 16 septembre 2005 - 15 sept. 2005 à 16:47
P__ROMEO Messages postés 294 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 9 mars 2006 - 15 sept. 2005 à 17:19
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

cs_ksper92 Messages postés 5 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 16 septembre 2005
15 sept. 2005 à 17:13
Alors voilà, j'ai juste ajouté un petit
rst.MoveLast
Dans le code et le tout fonctionne très bien ;)
3
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
15 sept. 2005 à 17:04
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
0
cs_ksper92 Messages postés 5 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 16 septembre 2005
15 sept. 2005 à 17:08
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.
0
P__ROMEO Messages postés 294 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 9 mars 2006 1
15 sept. 2005 à 17:14
<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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
15 sept. 2005 à 17:15
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
0
P__ROMEO Messages postés 294 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 9 mars 2006 1
15 sept. 2005 à 17:19
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<>
0
Rejoignez-nous