cs_bny
Messages postés24Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention31 mai 2010
-
6 févr. 2007 à 17:09
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 2009
-
6 févr. 2007 à 23:49
Je suis en ce moment en train de faire un programme de questionnaire en VB.NET 2005 et j'essaie de prendre des numéros de questions aléatoires dans ma base de données et de les mettre dans un tableau pour pouvoir les afficher ensuite. Voici mon code :
'Déclaration de mon tableau de question
Dim Questions() As Integer
...
Public Sub selectQuestions() Dim nbNiv(3) As Integer, nbQ As Integer Nothing, Qrestant As Integer Nothing Dim tabQuestion() As Integer Nothing, QCourant As Integer Nothing
'Requete pour aller chercher le nombre de question débutant, intermédiaire et expert du questionnaire table SelectBD("SELECT QDeb, QInter, QExp FROM Activite WHERE noClasse " & noClasse)
'Va chercher le nombre de questions de difficulté Débutant, Intermédiaire ou Expert choisi par l'utilisateur et fait le total du nombre de questions voulu
For Each ligne In table.Rows
For i As Integer = 0 To 2
nbNiv(i) = CType(ligne(i), Integer)
nbQ += nbNiv(i)
Next
Next
table.Dispose()
For i As Integer = 0 To 2
Qrestant = nbNiv(i)
While Qrestant > 0
table SelectBD("SELECT noQuestion FROM Questions WHERE nivQuestion " & i)
'Met les questions par niveau de difficulté dans un tableau
For Each ligne In table.Rows
tabQuestion(Qrestant - 1) = CType(ligne(0), Integer)
Next
table.Dispose()
'Choisi au hasard une place dans le tableau où mettre la question
Do Until Questions(QCourant) = Nothing <-----Null ReferenceException
QCourant = RandomClass.Next(1, nbQ)
Loop
Questions(QCourant) = tabQuestion(RandomClass.Next(1, nbNiv(i)))
Qrestant -= 1
End While
Next
End Sub
Il se peut que la logique pour mettre mes questions de façon aléatoire dans le tableau ne soit pas correcte mais je veux juste régler mon problème de tableau pour pouvoir faire des tests sur cette fonction. J'ai essayé beaucoup de choses pour le régler, je sais que le problème est probablement que je ne met pas de dimension à mon tableau cependant le nombre de question varie selon les désirs de l'utilisateur alors je ne peux lui donner une valeur fixe au départ. Alors si quelqu'un peut m'aider avec cela ce serait bien apprécié, ce n'est probablement rien de difficile alors j'espère avoir une/des réponse. De mon côté je continue à chercher.
A voir également:
NullReferenceException avec un tableau en VB.NET 2005
cs_bny
Messages postés24Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention31 mai 2010 6 févr. 2007 à 23:03
Non désolé, ça retourne encore une erreur. L'erreur est vraiment du au fait que je ne donne pas de grandeur à mon tableau car quand j'en met une mon code fonctionne. Et en passant, tu ne peux pas faire do...until....c'est vraiment do until....loop, entk selon ce que j'ai lu. J'ai réussi à corriger quelques bugs dont celui du NullReferenceException....voici comment j'ai fait :
Dim Questions As Integer()
...
'Déclaration des variables utiles à ce Sub
Dim nbNiv(3) As Integer, nbQ As Integer, nbTotQ As Integer, Qrestant As Integer = Nothing
Dim sortie As String = Nothing, noQuestion As Integer
'Requête qui va chercher le nombre de questions Débutant, Intermédiaire et Expert table SelectBD("SELECT QDeb, QInter, QExp FROM Activite WHERE noClasse " & noClasse)
'Place le nombre de questions pour chaque niveau de difficulté dans un tableau
For Each ligne In table.Rows
For i As Integer = 0 To 2
nbNiv(i) = CType(ligne(i), Integer)
nbQ += nbNiv(i)
Next
Next
table.Clear()
table = SelectBD("SELECT COUNT(noQuestion) as nbQuestions FROM Questions")
For Each ligne In table.Rows
nbTotQ = CType(ligne(0), Integer)
Next
table.Clear()
'Déclare mon nombre random et mes tableaux avec une dimension fixée par le nombre de questions
Dim QCourant As Integer = RandomClass.Next(0, nbQ)
Dim tabQuestion As Integer() = New Integer(nbTotQ - 1) {}
Questions = New Integer(nbQ - 1) {} <----Voici la bonne syntaxe pour un tableau à dimension variables
...
...
Il ne reste encore quelques bugs néanmoins j'ai eu la réponse à mon principal problème. Merci à Batto...même si ça n'a pas réglé mon problème tu avais effectivement trouvé une erreure de logique dans mon code et je l'ai maintenant réglé.