IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[VB.NET]Structures, class et iCompare


Sujet :

Windows Forms

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut [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 : 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

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    Il faut instancier les classes...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public tabCom() As New Commande

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Ce serait bien de pouvoir instancier cette classe !!!

    mais pas de chance si j'écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public tabCom() As New Commande
    le new se souligne et je peux lire en passant dessus

    arrays cannot be declared with 'new'
    je me suis donc mis à rêver que je pourrais utiliser plus bas dans mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ReDim tabCom(myNbrLigne) as new commande
    mais ça ne marche évidemment pas.

    D'autres idées ?

    Merci

  4. #4
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    Je crois qu'avant de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabCom(i).comId = drKen(0)
    il faudrait que tu crée l'objet Commande

    donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabCom(i) = new Command()
    ensuite tu peux accéder aux méthodes et propriétés de l'objet.

    entre paranthese, je me demande si ce ne serait pas plus facile de manipuler tout ca avec un arraylist, plutot qu'un tableau.... mais bon ca c'est un avis perso...

  5. #5
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    oh et j'oubliai, tu dois donner la taille de ton tableau avant de pouvoir creer un nouvel objet !

    const TAILLE as integer = 50
    Public tabCom (TAILLE) As Commande

    ou redimmensionne le quand il faut....

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Merci à tous,

    La solution de "graphicsxp" est la bonne !

    et je dois le mettre comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    While drKen.Read
                    tabCom(i) = New Commande
                    tabCom(i).comId = drKen(0)
    et pas comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    tabCom(i) = New Commande
    While drKen.Read
     
                    tabCom(i).comId = drKen(0)
    ce qui signifie qu'il faut instancier chaque élément de mon tableau.

    Je mets le sigle résolu mais si qqun connaît le code pour implémenter IComparable sur la première valeur de mon tableau "ComId", qu'il me le dise..

    Pour ce qui est de l'arrayList, je connais pas bien. Comme je l'expliquais dans mon message initial, le but du tableau est de gérer l'info en mémoire pour éviter d'accéder continuellement à la base de donnée. Maintenant peut-être qu'avec un dataset on gère tout aussi rapidement l'info que si elle est dans un tableau ?

    Merci à tous en tous cas

  7. #7
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    de rien. n'oublie pas de cliquer sur Résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Delphi.net]Structuration d'une application asp.net
    Par skywaukers dans le forum Delphi .NET
    Réponses: 7
    Dernier message: 28/12/2006, 11h50
  2. [VB.NET][VS2005] Classe PrintDocument - annuler l'impression
    Par annedeblois dans le forum Windows Forms
    Réponses: 3
    Dernier message: 23/10/2006, 14h14
  3. [VB.NET] view class diagram, comment l'utiliser?
    Par Bert10 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 30/04/2006, 02h41
  4. [.NET][PPC] Class POP3 gratuite pour pocket pc / Win CE
    Par freddyboy dans le forum Windows Mobile
    Réponses: 5
    Dernier message: 19/12/2005, 11h32
  5. [C++ .NET] Structure dynamique
    Par tidou dans le forum VC++ .NET
    Réponses: 17
    Dernier message: 29/10/2004, 20h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo