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)
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
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
J’obtiens le message suivant lors du premier passage (i vaut alors 0):
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
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
celà fonctionne tout à fait bien.
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),
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
Partager