[VB.NET] Probleme Tableau structure

Fermé
zlatan - 24 avril 2008 à 13:37
 zlatan - 25 avril 2008 à 15:35
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

4 réponses

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
zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 161
24 avril 2008 à 14:14
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
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
zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 161
24 avril 2008 à 15:19
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
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
zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 161
25 avril 2008 à 07:33
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