[résolu][VB.NET]Structures, class et iCompare
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:
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:
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:
1 2 3
|
tabCom(i).comId = drKen(0) |
Citation:
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:
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