NullReferenceException avec un tableau en VB.NET 2005

Résolu
cs_bny Messages postés 24 Date d'inscription lundi 6 mars 2006 Statut Membre Dernière intervention 31 mai 2010 - 6 févr. 2007 à 17:09
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 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.

3 réponses

cs_bny Messages postés 24 Date d'inscription lundi 6 mars 2006 Statut Membre Dernière intervention 31 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é.
3
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
6 févr. 2007 à 20:04
et en changeant Questions(QCourant) = Nothing  
par
IsNothing(Questions(QCourant))
ça retourne encore une erreur?

Ensuite ton Qcourant n'est pas instancié au début de ta boucle,
pourquoi ne pas faire :

          Do      
                  QCourant = RandomClass.Next(1, nbQ)
          Until IsNothing(Questions(QCourant))

               
Hvb aka Batto
bato.ltd at gmail.com
0
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
6 févr. 2007 à 23:49
hmmm si on peut faire un do... until, j'ai juste oublié le "loop"

Do

  'instructions 

Loop Until (test)

Hvb aka Batto
bato.ltd at gmail.com
0
Rejoignez-nous