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] "La référence d'objet n'est pas définie à une instance d'un objet"


Sujet :

Windows Forms

  1. #1
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut [vb.net] "La référence d'objet n'est pas définie à une instance d'un objet"
    Bonjour !

    J'ai crée un formulaire qui lit les résultats d'un tableau access, ligne par ligne et n'affichant que ce qui est utile.... Mais inconvénient il y a un message et je n'arrive pas à le résoudre....

    "La référence d'objet n'est pas définie à une instance d'un objet"

    J'ai déja recherché et j'ai trouvé des cas similaires, disons avec la même phrase erreur, mais bon ça ne m'a pas beaucoup aidé...

    Je vais vous donner le code afin de mieux visualiser... (c'est le code qui s'affiche lors du chargement de la page)

    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
    Private Sub Form6_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            Dim TableInci As New DataTable
            Dim LeDataSet As New DataSet
            Dim i As Integer
            'Gestion des erreurs
            Try
                'Ouverture de la connexion créee
                OleDbConnection2.Open()
                Try
                    OleDbDataAdapter1.Fill(LeDataSet, "Table des incidents")
                    TableInci = LeDataSet.Tables(0)
                    'Table récupérée
                    Try
     
                        Call AfficheIncident()
                        Call majPosition()
     
                    Catch ex As Exception
                        MsgBox(ex.Message)
                    End Try
                Catch ex As Exception
                    MsgBox(ex.Message)
                End Try
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
            OleDbConnection2.Close()
     
        End Sub
     
     
     
     
     Private Sub AfficheIncident()
     
            Dim ResReq As DataTable
            Dim UnEnreg As DataRow
            Dim LeDataSet As New DataSet
            ResReq = LeDataSet.Tables("Liste des incidents")
     
            UnEnreg = ResReq.Rows(0)
            'Affecter les champs de la base à l’interface
            txt_date.Text = UnEnreg(1)
            txt_num_incident.Text = UnEnreg(0)
            txt_desc_courte.Text = UnEnreg("Description courte")
            txt_desc_longue.Text = UnEnreg("Description (Dernière mise à jour)" & "Description (Historique)")
     
        End Sub
     
     
     
    Private Sub majPosition()
     
            Dim LeDataSet As New DataSet
            Dim imax, icur As Integer
            imax = Me.BindingContext(LeDataSet, "Query4").Count
            If imax = 0 Then
                affPos.Text = "(0)"
            Else
                icur = Me.BindingContext(LeDataSet, "Query4").Position + 1
                affPos.Text = icur.ToString & " / " & imax.ToString
            End If
     
        End Sub
    Merci d'avance pour votre aide.

  2. #2
    Membre expérimenté Avatar de LaChips
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 109
    Points : 1 482
    Points
    1 482
    Par défaut
    Bonjour,
    Ou est ce qu'elle apparait ton erreur?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 270
    Points : 270
    Points
    270
    Par défaut
    tu peux nous dire à quel se passe l'erreur ?
    à quelle ligne?

    ce sera plus simple

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 270
    Points : 270
    Points
    270
    Par défaut
    oups, même question laChips...

  5. #5
    SLE
    SLE est déconnecté
    Membre éclairé Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Points : 799
    Points
    799
    Par défaut
    Bon je suis pas un VBiste, mais je dirais que tu essaie de remplir une table d'un dataset qui n'a pas été défini.

    Tu fais un

    Dim LeDataSet

    puis plus bas tu fais un

    ...Fill(LeDataSet,"Table des incidents")

    Mais cette table n'existe pas dans ton dataset...

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 270
    Points : 270
    Points
    270
    Par défaut
    je pense que le message d'erreur serait si c'était le nom de la table qui n'est pas correct.

    Il y a, à mon avis, quelque part un objet qui n'est pas instancié

  7. #7
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    L'erreur se fait lorsque ma page se charge et il n'y a pas de débugage donc je ne peux pas vous indiquer quel ligne cause problème...

    Mais bon en faisant "joujou", il se passe que le message s'affiche entre les lignes orange :

    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
    Private Sub AfficheIncident()
     
            Dim ResReq As DataTable
            Dim UnEnreg As DataRow
            Dim LeDataSet As New DataSet
            ResReq = LeDataSet.Tables("Liste des incidents")
     
            UnEnreg = ResReq.Rows(0)
            'Affecter les champs de la base à l’interface
            txt_date.Text = UnEnreg(1)        
            txt_num_incident.Text = UnEnreg(0)
            txt_desc_courte.Text = UnEnreg("Description courte")
            txt_desc_longue.Text = UnEnreg("Description (Dernière mise à jour)" & "Description (Historique)")
     
        End Sub

  8. #8
    Membre actif Avatar de More
    Inscrit en
    Janvier 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2007
    Messages : 252
    Points : 268
    Points
    268
    Par défaut


    voici un code qui remplit un dataset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
           Try
                OleDbConnection.Open()
                OleDbCommand.Connection = con
                OleDbCommand.CommandText = "select champ from table"
                OleDbDataAdapter.SelectCommand = OleDbCommand
                OleDbDataAdapter.Fill(DataSet, "liste")
                OleDbConnection.Close()
            Catch ex As Exception
                MsgBox(ex.Message)
                OleDbConnection.Close()
            Finally
                OleDbConnection.Close()
            End Try
    bonne Chance

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 270
    Points : 270
    Points
    270
    Par défaut
    2 choses à dire :

    d'abord

    dans le page_load, je pense , comme l'indique More , que ton code qui remplit ton dataset n'est pas correct, tu ne lui précises pas de commande select donc il ne sait pas trop avec quoi remplir la table.

    et ensuite,

    tu re déclares un nouveau dataset dans ta procédure : "AfficheIncident()"

    donc, ce n'est pas bon non plus.

    tu dois utiliser le même que celui tu veux remplir dans le page load.

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 270
    Points : 270
    Points
    270
    Par défaut
    et aussi un petit conseil:

    Il vaut mieux éviter les blancs et les accents dans les noms de table et de champs .

  11. #11
    Membre actif Avatar de More
    Inscrit en
    Janvier 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2007
    Messages : 252
    Points : 268
    Points
    268
    Par défaut
    ouiii pcdj

    il faut bien utiliser le meme dataset rempli et non pas un nouveau. c'est logique

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 270
    Points : 270
    Points
    270
    Par défaut
    je trouve aussi

  13. #13
    Membre actif
    Avatar de Hatchepsout
    Inscrit en
    Octobre 2006
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Points : 222
    Points
    222
    Par défaut
    Citation Envoyé par lou87

    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
    Private Sub AfficheIncident()
     
            Dim ResReq As DataTable
            Dim UnEnreg As DataRow
            Dim LeDataSet As New DataSet
            ResReq = LeDataSet.Tables("Liste des incidents")
     
            UnEnreg = ResReq.Rows(0)
            'Affecter les champs de la base à l’interface
            txt_date.Text = UnEnreg(1)        
            txt_num_incident.Text = UnEnreg(0)
            txt_desc_courte.Text = UnEnreg("Description courte")
            txt_desc_longue.Text = UnEnreg("Description (Dernière mise à jour)" & "Description (Historique)")
     
        End Sub
    1)verifier si ta table "Liste des incidents" est bien celle qui existe dans ta base de donneés(verifier son nom lettre par lettre)

    ou bien
    2) ta datatable Nécessite un NEW.

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 270
    Points : 270
    Points
    270
    Par défaut
    2) ta datatable Nécessite un NEW.
    il n'y a pas besoin de new pour la datatable puisqu'elle est instanciée au moment où on lui affecte la datatable du dataset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ResReq = LeDataSet.Tables("Liste des incidents")
    Je persiste à dire que :

    premièrement , le dataset n'est pas correctement rempli dans le page_load.

    deuxièmement , il faut utiliser ce même dataset dans la procédure "AfficheIncident()" .

    Il est néanmoins possible qu'il y ait aussi une erreur au niveau du nom de la table mais alors le message d'erreur serait différent, je pense qu'on aurait quelque chose du genre :
    the table does not belong to dataset ...

  15. #15
    Membre actif Avatar de More
    Inscrit en
    Janvier 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2007
    Messages : 252
    Points : 268
    Points
    268
    Par défaut
    je crois que le probleme est les espaces qui se trouvent dans les noms de la table, c'est pour cela qu'il ne rempli pas le dataset

  16. #16
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    Coucou ^^

    J'ai suivit vos conseils et donc voici les modifications......

    Ma page s'affiche sans message d'erreur mais il n'y a que m'a date qui s'affiche dans le formulaire.....


    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
    Private Sub Form6_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            Dim TableInci As New DataTable
            Dim LeDataSet As New DataSet
            Dim i As Integer
     
            Dim Mycommand As OleDbCommand = OleDbConnection2.CreateCommand()
     
            Try
                OleDbConnection2.Open()
                Mycommand.CommandText = "SELECT [No d'incident], [Date de modification], [Description courte], [Description (Dernière mise à jour)], [Description (Historique)] FROM ResultatBO"
                OleDbDataAdapter1.SelectCommand = Mycommand
                OleDbDataAdapter1.Fill(LeDataSet, "ResultatBO")
                OleDbConnection2.Close()
     
                Call AfficheIncident(LeDataSet)
                Call majPosition(LeDataSet)
     
            Catch ex As Exception
                MsgBox(ex.Message)
                OleDbConnection2.Close()
            Finally
                OleDbConnection2.Close()
            End Try
     
        End Sub
     
     
     
        'Private Sub btn_precedent_Click(ByVal sender As System.Object, ByVal e As System.EventArgs, ByVal LeDataSet As DataSet) Handles btn_precedent.Click
     
        'Me.BindingContext(LeDataSet, "ResultatBO").Position -= 1
        'majPosition(LeDataSet)
     
        'End Sub
     
        'Private Sub btn_suivant_Click(ByVal sender As System.Object, ByVal e As System.EventArgs, ByVal LeDataSet As DataSet) Handles btn_suivant.Click
     
        'Me.BindingContext(LeDataSet, "ResultatBO").Position += 1
        'majPosition(LeDataSet)
     
        'End Sub
     
     
     
     
        Private Sub majPosition(ByVal LeDataSet)
     
            Dim imax, icur As Integer
            imax = Me.BindingContext(LeDataSet, "ResultatBO").Count
            If imax = 0 Then
                affPos.Text = "(0)"
            Else
                icur = Me.BindingContext(LeDataSet, "ResultatBO").Position + 1
                affPos.Text = icur.ToString & " / " & imax.ToString
            End If
     
        End Sub
     
     
     
     
        Private Sub AfficheIncident(ByVal LeDataSet)
     
            Dim ResReq As DataTable
            Dim UnEnreg As DataRow
            Dim IndiceIncident As Integer
     
            ResReq = LeDataSet.Tables("ResultatBO")
            UnEnreg = ResReq.Rows(IndiceIncident)
            'Affecter les champs de la base à l’interface
            txt_date.Text = UnEnreg(1)
            txt_num_incident.Text = UnEnreg(0)
            txt_desc_courte.Text = UnEnreg(2)
            txt_desc_longue.Text = UnEnreg(3)
            txt_desc_longue.Text = UnEnreg(4)
     
        End Sub
    Voili ^^

    Et merci pour votre aide !

    P.S : Je n'ai aucun contrôle sur l'intitulé des colonnes, se sont des colonnes qui existent déja donc je ne peux pas les modifier, sinon je l'aurais déjà fait volontier.

  17. #17
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    Personne n'a une idée ?

  18. #18
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    AAAAAAAAaaaaaaahhhhhh !!!!!!

    A force de chercher, j'ai réussi à trouver ce qui clochait, c'est bête et ça m'ennuis, ça ménerve......

    Il ne m'affiche pas les autres résultats car se sont des listbox et non des TextBox......

    Que faire ?

    Quelqu'un à une idée s'il vous plait !

    P.S : En plus je ne peux pas remplacer mes listbox par des textbox car ce que je veux mettre dedans est trop long.... sinon s'aurait été trop simple....


  19. #19
    Membre régulier
    ingénieur informaticien
    Inscrit en
    Novembre 2005
    Messages
    114
    Détails du profil
    Informations professionnelles :
    Activité : ingénieur informaticien

    Informations forums :
    Inscription : Novembre 2005
    Messages : 114
    Points : 103
    Points
    103
    Par défaut
    faudrait peut-être mettre à jour les sources de tes listbox !

  20. #20
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    L'objet LeDataSet est défini en local dans les 2 procédures, donc les 2 objets sont différents !!
    LeDataSet qui est rempli dans le Load n'est pas le meme dans ta procédure "AfficheIncident"

    Declare ton objet LeDataSet au niveau de ta classe ou passe le DataSet en paramètre dans ta procédure...

    Edit : Oups, j'avais pas vu la 2eme page...

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/11/2013, 10h24
  2. Réponses: 2
    Dernier message: 01/08/2013, 15h40
  3. Réponses: 21
    Dernier message: 30/12/2010, 13h33
  4. Réponses: 8
    Dernier message: 04/06/2007, 16h20
  5. Réponses: 8
    Dernier message: 11/07/2006, 17h27

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