Bonjour,
Je travaille depuis quelques mois sur une appli en VB.Net. Jusqu'alors, tout se passait très bien, ça marchait et tout et tout.
Mais voilà qu'aujourd'hui, mon programme ne fonctionne plus. Voici tous les détails en... détail
Pour les besoins de l'application, j'ai codé une sorte de base de données, basée sur l'utilisation d'une SortedList, contenant elle-même des ArrayList (indéxées par leur clé dans la SortedList).
Pour rendre plus facile le développement, j'ai fais une classe "clsBDD". En voici la source (attention, c'est un peu long) :
Voilà pour le code =)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113 Imports System.IO Imports System.Collections Imports System.Runtime.Serialization.Formatters.Binary Public Class clsBDD Private Database As SortedList Private al As ArrayList Private StreamFile As Stream Private Serializer As New BinaryFormatter Private Enumerator As IDictionaryEnumerator Private Fichier As String ' // METHODES PUBLIQUES Public Sub New(ByVal fich As String) Database = New SortedList() al = New ArrayList If Not File.Exists(fich) Then CreateDirectory(fich) End If Fichier = fich LoadFile() End Sub Private Sub CreateDirectory(ByVal fich As String) If IO.Directory.Exists(fich.Substring(0, fich.LastIndexOf("\"))) = False Then IO.Directory.CreateDirectory(fich.Substring(0, fich.LastIndexOf("\"))) End If If Not File.Exists(fich) Then File.WriteAllText(fich, "") End If End Sub Public Sub Add(ByRef sVal As ArrayList) Database.Add(GetLastID(), sVal) End Sub Public Property Item(ByVal sKey As String) As Object Get Return Database.Item(sKey) End Get Set(ByVal value As Object) Database.Item(sKey) = value End Set End Property Public Property Item(ByVal index As Integer) As Object Get Return Database.Item(Database.GetKey(index)) End Get Set(ByVal value As Object) Database.Item(Database.GetKey(index)) = value End Set End Property Public ReadOnly Property Count() As Long Get Count = Database.Count End Get End Property Public Sub Remove(ByVal sKey As String) Database.Remove(sKey) End Sub Public Function GetLastID() As String If Database.Count = 0 Then Return 0 End If Dim nb As Integer = 0 '' RECUPERATION NOMBRE LE PLUS GRAND For i As Integer = 0 To Database.Count - 1 If nb < Database.GetKey(i) Then nb = Database.GetKey(i) Next Return nb + 1 End Function Public Function GetidRow(ByVal index As Integer) Return Database.GetKey(index) End Function Public Function KeyExists(ByVal sKey As String) As Boolean If Database.IndexOfKey(sKey) = -1 Then Return False 'If Database.IndexOfKey(sKey) = Nothing Then Return False Return True End Function ' // METHODES PRIVEES Private Sub LoadFile() Try StreamFile = File.OpenRead(Fichier) Catch End Try If StreamFile.Length > 0 Then Database = CType(Serializer.Deserialize(StreamFile), SortedList) Else Database = New SortedList End If StreamFile.Close() End Sub Public Sub Save() File.WriteAllText(Fichier, "") StreamFile = File.OpenWrite(Fichier) Serializer.Serialize(StreamFile, Database) StreamFile.Close() End Sub End Class
L'application est en mode "fenêtre" et j'instancie tous ces objets dans le Sub Form_Load().
Voici le code :
Tous les objets sont déclarés dans un Module, en Public :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Private Sub Load_Instances() Musics = New clsBDD("Database\Musiques.mrm") Categories = New clsBDD("Database\Categories.mrm") RotationRules = New clsBDD("Database\RotationsRules.mrm") RotationsGrid = New clsBDD("Database\RotationsGrid.mrm") RotationEngine = New clsRotation() Config = New clsBDD("Database\Config.mrm") End Sub
C'est là que tout va mal. Au débug, voici ce que Visual m'affiche : http://myprogsoft.online.fr/vbfr/ErMRM.png
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 '' Classes de gestion BDD Public Musics As clsBDD Public Categories As clsBDD Public RotationRules As clsBDD Public RotationsGrid As clsBDD Public RotationEngine As New clsRotation() Public Config As clsBDD
La trace d'appels de l'InnerException affiche ceci :
à My_Radiomatisme_Finale.clsRotation..ctor() dans C:\Documents and Settings\Ted\Mes documents\Visual Studio 2005\Projects\My Radiomatisme Finale\My Radiomatisme Finale\Classes\clsRotation.vb:ligne 37
à My_Radiomatisme_Finale.modClasses..cctor() dans C:\Documents and Settings\Ted\Mes documents\Visual Studio 2005\Projects\My Radiomatisme Finale\My Radiomatisme Finale\Modules\modClasses.vb:ligne 9
Je tiens à préciser que si j'instancie directement les objets dans le module ("Public Music As New clsBDD(...)"), ça plante aussi, avec la même erreur.
Voilà, après de maintes et longues recherche sur Google et tous les forums spécialisés que j'ai pu trouver, j'en viens à demander de l'aide ici.
Merci à toute âme charitable qui saurait m'apporter un peu d'aide
Partager