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

VB.NET Discussion :

Je ne comprends pas l'erreur du code : référence d'objet n'est pas définie à une instance d'un objet


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 127
    Points : 26
    Points
    26
    Par défaut Je ne comprends pas l'erreur du code : référence d'objet n'est pas définie à une instance d'un objet
    Bonjour,

    Je suis débutant en VB.net et j'ai utilisé le code du Cours de Philippe Lasserre pour me connecter à ma base access et ajouter des enregistrements à une table.

    Cependant, ça me met l'erreur suivante quand je clique sur le bouton pour ajouter: " La référence d'objet n'est pas définie à une instance d'un objet."

    Je vous met le code que j'ai mis et mis un commentaire devant la ligne où j'ai l'erreur:

    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
     
    Imports System.Data
    Imports System.Data.OleDb
     
    Public Class Form1
        '  Déclaration Objet Connexion
        Private ObjetConnection As OleDbConnection
        ' Déclaration Objet Commande
        Private ObjetCommand As OleDbCommand
        '  Déclaration Objet DataAdapter
        Private ObjetDataAdapter As OleDbDataAdapter
        ' Déclaration Objet DataSet
        Private ObjetDataSet As New DataSet() 'Attention au New
        'String contenant la 'Requête SQL'
        Private strSql As String
        ' Déclaration Objet DataTable
        Private ObjetDataTable As DataTable
        ' Déclaration Objet DataRow (ligne)
        Private ObjetDataRow As DataRow
        'Numéro de la ligne en cours
        Private RowNumber As Integer    'Numéro de l'enregistrement courant
        'Paramêtres de connexion à la DB
        Private strConn As String
        'Pour recompiler les données modifiées avant de les remettre dans le
        '"DataAdapter"
        Private ObjetCommandBuilder As OleDbCommandBuilder
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Initialisation de la chaîne de paramètres pour la connexion
            strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\Users\mto\Desktop\MINI-ERP\ERP.accdb;"
            'Initialisation de la chaîne contenant l'instruction SQL
            strSql = "SELECT Type de produit.* FROM Type de produit"
            'Instanciation d'un Objet Connexion
            ObjetConnection = New OleDbConnection()
            'Donner à la propriété ConnectionString les paramètres de connexion
            ObjetConnection.ConnectionString = strConn
            'Ouvrir la connexion
            ObjetConnection.Open()
            'Instancier un objet Commande
            ObjetCommand = New OleDbCommand(strSql)
            'Instancier un objet Adapter
            ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
            'initialiser l'objet Command
            ObjetCommand.Connection() = ObjetConnection
            'Avec l'aide de la propriété Fill du DataAdapter charger le DataSet
            ObjetDataAdapter.Fill(ObjetDataSet, "Type de produit")
            'Mettre dans un Objet DataTable une table du DataSet
            ObjetDataTable = ObjetDataSet.Tables("Type de produit")
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
     
    ' La référence d'objet n'est pas définie à une instance d'un objet."
            ObjetDataRow = ObjetDataSet.Tables("Type de produit").NewRow()
     
     
            ObjetDataRow("Type_de_produit") = Me.TextBox1.Text
            ObjetDataSet.Tables("Type de produit").Rows.Add(ObjetDataRow)
            'Pour modifier les valeurs changées dans le DataAdapter
            ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter)
            'Mise à jour
            ObjetDataAdapter.Update(ObjetDataSet, "Type de produit")
            'On vide le DataSet et on le 'recharge' de nouveau.
            ObjetDataSet.Clear()
            ObjetDataAdapter.Fill(ObjetDataSet, "Type de poduit")
            ObjetDataTable = ObjetDataSet.Tables("Type de produit")
     
        End Sub
    End Class
    Merci d'avance pour votre aide

    Julien

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 206
    Points : 455
    Points
    455
    Par défaut
    Tu n'as pas instancié ton objet ObjetDataSet.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 127
    Points : 26
    Points
    26
    Par défaut
    Comment ça je ne l'ai pas instancier ?

    Il faut que je l'instancie où ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 206
    Points : 455
    Points
    455
    Par défaut
    Ah, désolé la variable est bien instancier (ligne 13) par dfault lors de la création de ta classe.
    Tu as quoi dans Table lorsque tu passe en pas à pas ?

  5. #5
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    es-tu sûr que ta requête s'est exécutée correctement ? Je trouve bizarre que tu puisses faire appel à une table, dont le nom contient des espaces, sans token englobant (genre `, char 96 en ASCII). Ça expliquerait le plantage du .Fill(), que Tables("Type de produit") soit donc null, et l'appel à sa méthode .NewRow() lève cette exception.
    Plus je connais de langages, plus j'aime le C.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 127
    Points : 26
    Points
    26
    Par défaut
    J'ai changé le nom de la table en enlevant les espaces et ça me met la même erreur.
    Après dans ma table il y a un champs ID_produit (NumAuto) et un champs Type_de_produit (Texte)

    J'ai fait un formulaire avec une textbox et un bouton ajouter
    Lorsque je clique sur le bouton ajouter, ça rajoute ce que j'ai inscrit dans la textbox dans le champs Type_de_produit de la table TypeDeProduit

    Mais ca ne marche pas comme je vous ai dis ça me met une erreur.

  7. #7
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    T'as changer le nom pour toutes les occurrences dans ton code ? T'as aussi changé le nom côté DB ?

    Sinon, si l'erreur est levée sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjetDataRow = ObjetDataSet.Tables("Type de produit").NewRow()
    Alors c'est que soit objectDataSet est null soit objectDataSet.Tables("Type de produit") renvoie null.

    Comme le dit chaparo, passe en debug en pas-à-pas et vérifie que chaque ligne fait ce qu'elle doit (notamment dans ton Form_Load()).
    M'est avis que ton erreur vient de tes manip' sur la DB.
    Plus je connais de langages, plus j'aime le C.

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 025
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 025
    Points : 5 462
    Points
    5 462
    Par défaut
    Regarde en debug ce que tu as comme objet dans ObjetDataSet.Tables.
    D'ailleurs au passage à quoi te set "ObjetDataTable" N'est-ce pas censé contenir la table que tu cherches? Si cette variable est elle aussi null, ton problème vient surement de la création de cette table.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 127
    Points : 26
    Points
    26
    Par défaut
    Oui j'ai changé les nom des deux coté. Du cote de la base access et du coté du cote
    J'ai essayé de passer en debug pas a pas mais ça me montre pas grand chose.

  10. #10
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Salut

    J'ai l'impression que provider=microsoft.jet.oledb.4.0 fonctionne avec des DB de type mdb et non accdb

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 127
    Points : 26
    Points
    26
    Par défaut
    J'ai rien dans Datatable.

    Personne voit pourquoi ça marche pas ?

  12. #12
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    D'abord verifie ta connection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        dim Connection As New OleDb.OleDbConnection
        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\Users\mto\Desktop\MINI-ERP\ERP.accdb;"
        Connection.ConnectionString = strConn
            Try
                Connection.Open()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
     
            End Try

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 127
    Points : 26
    Points
    26
    Par défaut
    C'est bon ça marche.
    Ca venait de la connexion
    Il faut que je mette Provider=Microsoft.ACE.OLEDB.12.0 pour que ca marche

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/10/2011, 10h31
  2. Réponses: 6
    Dernier message: 31/03/2010, 09h56
  3. Réponses: 7
    Dernier message: 31/12/2009, 09h10
  4. Réponses: 0
    Dernier message: 29/12/2009, 09h51
  5. Réponses: 8
    Dernier message: 04/06/2007, 16h20

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