[VB.NET] Probleme Tableau structure

Bonjour
Voila j'ai un probleme avec un tableau a une dimension structuré

1. Public Structure mouvement
2. <VBFixedString(10)> Dim datemv As String
3. <VBFixedString(10)> Dim libellé As String
4. <VBFixedString(50)> Dim débit As String
5. <VBFixedString(10)> Dim crédit As String
6. End Structure
7. Dim n As Integer = 0
8. Dim tabmouv() As mouvement
9. tabmouv(n).datemv = "0"
10. tabmouv(n).libellé = "0"
11. tabmouv(n).débit = "0"
12. tabmouv(n).crédit = "0"

J'ai un avertissement sur la ligne souligné
"Avertissement 2 La variable 'tabmouv' est utilisée avant qu'une valeur ne lui ait été assignée. Une exception de référence null peut se produire au moment de l'exécution."
J'ai l'erreur suivante sur la ligne soulignée lorsque j'execute
"System.NullReferenceException : La référence d'objet n'est pas définie à une instance d'un objet."

merci de votre aide
Configuration: Windows XP
Firefox 2.0.0.13
Visual Studio 2005 Pro

4 réponses

  1. ok merci mais finallement je fait avec une collection : generic.list
    ça fonctionne maintenant je tri cette liste par date croissante
    listmouv est la liste deja rempli :
    Dim permut As Boolean = True
    Dim tabdate1() As String
    Dim tabdate2() As String
    Dim stock As mouvement
    Dim j As Integer
    Do While permut = True
    permut = False
    For j = 1 To listmouv.Count - 1
    tabdate1 = Split(listmouv.Item(j - 1).datemv, "/", 3)
    tabdate2 = Split(listmouv.Item(j).datemv, "/", 3)
    If Val(tabdate1(2)) > Val(tabdate2(2)) Then
    permut = True
    Else
    If Val(tabdate1(2)) = Val(tabdate2(2)) And Val(tabdate1(1)) > Val(tabdate2(1)) Then
    permut = True
    Else
    If Val(tabdate1(2)) = Val(tabdate2(2)) And Val(tabdate1(1)) = Val(tabdate2(1)) And Val(tabdate1(0)) >= Val(tabdate2(0)) Then
    permut = True
    End If
    End If
    End If
    If permut = True Then
    stock = listmouv.Item(j - 1)
    listmouv.Item(j - 1) = listmouv.Item(j)
    listmouv.Item(j) = stock
    End If
    Next
    Loop
    1. en faisant cela : Dim tabmouv() As mouvement
      tu as declaré un pointeur (c'est a dire sans dimension)
      tu dois declarer ton tableau avec une dimension finie : Dim tabmouv(2) As mouvement
      du coup tabmouv(0) sera connu
      1. merci de ta réponse

        Le probleme c'est que je ne sais pas combien d'élément je vais mettre dans mon tableau
        Je vais parcourrir une base de donnée et ajouter dans le tableau tout les mouvements

        Il faudrait que je compte le nombre de mouvement dans ma base de donnée puis ensuite je fait
        dim tabmouv(nbmouv) as mouvement ?
        1. ce serait une solution.
          La deuxieme serait de faire de l'allocation dynamique pour ton tableau. Mais je ne me souviens plus des commandes. Il faudrait que tu regardes dans l'aide de VB du coté de New() je pense.
      2. merci
        oui j'ai vu dans l'aide il parle de new mais j'ai pas tout compris

        Là avec la premiere solution ça irai mais pour la requete j'ai un petit souci
        select count(numéro) from mouvements
        mouvements est une table, numéro est un champ de mouvements
        Normalement j'ai un entier en sortie de cette requete ?
        J'ai fait :
        Dim monAccesBD = New gestionBD("127.0.0.1", "baseig", "root", "root")
        Dim nbmv As Integer = monAccesBD.MySQL_Select("select count(numéro) from mouvements")
        Dim tabmouv(nbmv) As mouvement
        mais il me dit que nbmv doit être de type odbc.odbcdataReader
        1. dans ce cas la, tu pourrais utilliser les fonction Redim

          Public Structure mouvement
          <VBFixedString(10)> Dim datemv As String
          <VBFixedString(10)> Dim libellé As String
          <VBFixedString(50)> Dim débit As String
          <VBFixedString(10)> Dim crédit As String
          End Structure

          Dim tabmouv() As mouvement

          Sub Main()

          ReDim tabmouv(2)

          tabmouv(0).datemv = "0"
          tabmouv(0).libellé = "0"
          tabmouv(0).débit = "0"
          tabmouv(0).crédit = "0"
          ...

          et tu fais ton redim dans ta boucle de lecture