Structures, class et iCompare

Je patauge un peu dans le code suivant, quelqu’un peut-il m’aider ?

Je dispose dans une base de données une table qui comporte seulement une centaine d’enregistrements avec beaucoup de champs. Je dois pouvoir effectuer de très nombreux et complexes calculs sur ces champs et j’ai donc l’idée de créer une classe « calcul » qui me retourne à la demande le résultat du calcul demandé.

Pour éviter de devoir accéder sans cesse à la base de donnée, je voudrais copier au chargement les données dans un tableau que j’avais d’abord défini en tant que structure (j'avais alors la difficulté de le trier et d'implémenter Icompare), j’essaye donc maintenant de le définir en tant que classe.

Attention, dans le code ci-après, il faut redéfinir une connection correcte vers une base de données (chez moi, access)

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
 
Public Module Globales
    Public tabCom() As Commande
 
Public Class MajInitCom
 
 
        Sub New()
 
            Dim conKen As New System.Data.OleDb.OleDbConnection
            Dim cmdKen As New System.Data.OleDb.OleDbCommand
            Dim drKen As System.Data.OleDb.OleDbDataReader
            Dim myNbrLigne As Integer
 
            Dim i As Integer
 
 
            conKen.ConnectionString = "*** ICI connection à une base de donnée ACCES
            cmdKen.CommandType = CommandType.Text
            cmdKen.Connection = conKen
 
            cmdKen.CommandText = "Select count(*) from ComTbl"
 
            conKen.Open()
            myNbrLigne = cmdKen.ExecuteScalar()
 
            ReDim tabCom(myNbrLigne)
 
            cmdKen.CommandText = "Select " & _
            "comId," & _
            "comCnyId," & _
            "comCreaDate," & _
            "comDescr" & _
            " from ComTbl"
 
            drKen = cmdKen.ExecuteReader
 
            i = 0
            While drKen.Read
 
                tabCom(i).comId = drKen(0)
                tabCom(i).comCnyId = drKen(1)
                tabCom(i).comCreaDate = drKen(2)
                tabCom(i).comDescr = drKen(3)
 
                i += 1
 
            End While
 
        End Sub
 
    End Class
 
    Class Commande
        Public comId As Integer 'numéro du contrat
        Public comCnyId As Integer 'lien vers ID Cny
        Public comCreaDate As Date 'date de création de la commande 
        Public comDescr As String 'Description
    End Class
 
End Module
Dans un formulaire, je voudrais lancer l’initialisation sur chargement avec

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
Private Sub FrmK_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim myMaj As MajInitCom = New MajInitCom
    End Sub
J’obtiens le message suivant lors du premier passage (i vaut alors 0):

sur la ligne

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
 
tabCom(i).comId = drKen(0)
An unhandled exception of type 'System.NullReferenceException' occurred in KenPrj.exe

Additional information: Object reference not set to an instance of an object.

Alors que si je défini mon tableau comme unidimensionnel entier et que je lui affecte
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
Public tabCom() As integer
 
 tabCom(i) = drKen(0), 
 'tabCom(i).comCnyId = drKen(1)
 'tabCom(i).comCreaDate = drKen(2)
' tabCom(i).comDescr = drKen(3)
 
tabCom(i) = drKen(0),
celà fonctionne tout à fait bien.

Pouvez-vous m’aider ?

Comme question subsidiaire, sans vouloir abuser, quell serait le code pour implementer Icomparable sur mon ComId et ou dois-je le mettre.

Merci
editer par neguib pour l'ajustements des balises