[VB.NET] Probleme Tableau structure

zlatan -  
 zlatan -
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. zlatan
     
    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
  2. zavenger Messages postés 817 Statut Membre 161
     
    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
    0
  3. zlatan
     
    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 ?
    0
    1. zavenger Messages postés 817 Statut Membre 161
       
      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.
      0
  4. zlatan
     
    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
    0
    1. zavenger Messages postés 817 Statut Membre 161
       
      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
      0