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 :

La référence d'objet n'est pas définie à une instance d'un objet. [Débutant]


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Ecole Superieur de Technologie
    Inscrit en
    Octobre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ecole Superieur de Technologie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut La référence d'objet n'est pas définie à une instance d'un objet.
    Bonjour,
    J'ai un problème avec la modification et la suppression dans une application qui fait la gestion du personnel, l'erreur "La référence d'objet n'est pas définie à une instance d'un objet." s'affiche après que la fonction de la recherche s’exécute, apres que je clique sur modifier ou supprimer, voila le code de ma classe :

    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
    Imports System.Data.OleDb
    Imports System.Windows.Forms
     
    Public Class informatique_connection
        Public mycon As OleDbConnection
        Public strcon As String
        Public rdr As OleDbDataReader
        Public myreq As String
        Public cmd As OleDbCommand
     
        Public Sub connecting_in_informatique()
            strcon = "provider=Microsoft.ACE.OLEDB.12.0; Data source=C:\Users\user\Documents\bd.accdb"
            mycon = New OleDbConnection(strcon)
            mycon.Open()
     
        End Sub
        Public Sub disconnecting_in_informatique()
            rdr.Close()
            mycon.Close()
        End Sub
     
        Public Function RechercheSelonMatricule(ByVal idmatricule As Integer) As OleDbDataReader
     
            Dim sql As String = String.Empty
            Dim command As New OleDbCommand(sql, mycon)
     
            command.CommandText = "  SELECT * FROM Perso WHere Matricule = [?];"
            command.Parameters.Add("?", OleDbType.Integer).Value = idmatricule
            Return command.ExecuteReader()
     
        End Function
     
     
     
    End Class
    voila le code de la modification :

    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
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            db_informatique.myreq = "UPDATE Perso SET Matricule = '" & a1.Text.Trim & "' , Nom = '" & a2.Text.Trim & "', Prenom ='" & a3.Text.Trim & "' , CIN = '" & a4.Text.Trim & "', Date de naissance = '" & a5.Text.Trim & "' , Adresse = '" & a6.Text.Trim & "', Tél = '" & a7.Text.Trim & "', E-mail = '" & a8.Text.Trim & "', Situation familiale = '" & a9.Text.Trim & "', Date de recrutement = '" & a10.Text.Trim & "', Date previsible de retraitet = '" & a11.Text.Trim & "', Echelle  = '" & a12.Text.Trim & "', Formations de base = '" & a13.Text.Trim & "', droit de congé = '" & a14.Text.Trim & "', jours restants du congé = '" & a15.Text.Trim & "' WHERE Matricule =  '" & a1.Text & "' "
            db_informatique.connecting_in_informatique()
            db_informatique.disconnecting_in_informatique()
            MessageBox.Show("Modification effectuée!")
            Me.Mettre_au_blanc()
        End Sub
        Public Sub Mettre_au_blanc()
            Me.a1.Text = " "
            Me.a2.Text = " "
            Me.a3.Text = " "
            Me.a4.Text = " "
            Me.a5.Text = " "
            Me.a6.Text = " "
            Me.a7.Text = " "
            Me.a8.Text = " "
            Me.a9.Text = " "
            Me.a10.Text = " "
            Me.a11.Text = " "
            Me.a12.Text = " "
            Me.a13.Text = " "
            Me.a14.Text = " "
            Me.a15.Text = " "
        End Sub
    et voila le code de la suppression :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
            db_informatique.myreq = "DELETE * FROM Perso WHere Matricule = '" & a1.Text & "' "
            db_informatique.connecting_in_informatique()
            db_informatique.disconnecting_in_informatique()
        End Sub
    quelqu'un pourra m'aider??

    Merci d'avance...
    Images attachées Images attachées  

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Il faut initialiser la variable rdr avant de l'utiliser, sinon elle vaut null et ce n'est pas prêt de marcher

    Tu l'as bien fait avec la variable mycon, il faut donc faire de même pour rdr.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    bonjour,
    la variable rdr est déclarée mais n'est pas instanciée :
    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
     
    Imports System.Data.OleDb
    Imports System.Windows.Forms
     
    Public Class informatique_connection
        Public mycon As OleDbConnection
        Public strcon As String
       'Public rdr As OleDbDataReader
        Public myreq As String
        Public cmd As OleDbCommand
     
        Public Sub connecting_in_informatique()
            strcon = "provider=Microsoft.ACE.OLEDB.12.0; Data source=C:\Users\user\Documents\bd.accdb"
            mycon = New OleDbConnection(strcon)
            mycon.Open()
     
        End Sub
        Public Sub disconnecting_in_informatique()
           'rdr.Close()
            mycon.Close()
        End Sub
     
        Public Function RechercheSelonMatricule(ByVal idmatricule As Integer) As OleDbDataReader
     
            Dim sql As String = String.Empty
            Dim command As New OleDbCommand(sql, mycon)
     
            command.CommandText = "  SELECT * FROM Perso WHere Matricule = [?];"
            command.Parameters.Add("?", OleDbType.Integer).Value = idmatricule
            Return command.ExecuteReader()
     
        End Function
     
     
     
    End Class

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Ecole Superieur de Technologie
    Inscrit en
    Octobre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ecole Superieur de Technologie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    d'accord, mais pouvez vous me dire par quoi je dois l'initialiser ?

  5. #5
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    d'accord, mais pouvez vous me dire par quoi je dois l'initialiser ?
    Si la variable n'est pas utilisée, ... il faut l'enlever ...

    Si elle est instanciée par une autre classe ou un autre objet (car la variable est publique... mais c'est une autre histoire), il faut vérifier dans la fonction "disconnecting_in_informatique" que le datareader existe avant de le clore.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      Public Sub disconnecting_in_informatique()
            If Not IsNothing(rdr) Then rdr.Close()
            mycon.Close()
        End Sub

  6. #6
    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

    ça m'a l'air
    du point de vue design

    Pourquoi écrire une class seulement pour connecter ta bdd
    dommage que tu n' ajoutes pas des méthodes pour chaque requete
    une déja est RechercheSelonMatricule
    il te faut encore deux autres
    UpdateDetailsClient et DeleteRecordClient et en utilisant des requetes
    parametrées

    et dans ta form tu instancies une fois ta class et appelle les méthodes
    selon besoin

    autre chose aussi
    dans ta BDD tous tes champs sont du type text ?
    parce que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     UPDATE Perso SET Matricule = '" & a1.Text.Trim ....
    Matricule c'est pas un nombre ?

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Ecole Superieur de Technologie
    Inscrit en
    Octobre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ecole Superieur de Technologie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    dkmix ca marche mais la modification et la suppression ne s'effectue pas meme si le msgbox s'affiche, est ce que ca signifie que la requette n'est pas correcte?

    shayw désolé je n'ai pas bien compris, et non matricule est de type numerique

  8. #8
    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
    normal que cela ne marche pas
    où dans ton code la requete écrite dans form1 update ....
    est exécuté ?
    tu assignes un string db_informatique.myreq
    établis une connection
    ferme ta connection
    et le résultat rien ne passe :

    et ensuite il y a un problème avec les types de données définit dans ta bdd
    et la requete update

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Ecole Superieur de Technologie
    Inscrit en
    Octobre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ecole Superieur de Technologie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    s'il vous plaît explique moi petit à petit parce que je suis déjà débutante, pouvez vous me dire ou est le problème exactement ? est ce qu'il faut ajouter les fonctions de la modification et la suppression dans la classe? est ce que les requêttes sont incorrectes?

  10. #10
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    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
     
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
         'la vous definissez une variable de type text
         db_informatique.myreq = "UPDATE Perso SET Matricule = '" & a1.Text.Trim & "' , Nom = '" & a2.Text.Trim & "', Prenom ='" & a3.Text.Trim & "' , CIN = '" & a4.Text.Trim & "', Date de naissance = '" & a5.Text.Trim & "' , Adresse = '" & a6.Text.Trim & "', Tél = '" & a7.Text.Trim & "', E-mail = '" & a8.Text.Trim & "', Situation familiale = '" & a9.Text.Trim & "', Date de recrutement = '" & a10.Text.Trim & "', Date previsible de retraitet = '" & a11.Text.Trim & "', Echelle  = '" & a12.Text.Trim & "', Formations de base = '" & a13.Text.Trim & "', droit de congé = '" & a14.Text.Trim & "', jours restants du congé = '" & a15.Text.Trim & "' WHERE Matricule =  '" & a1.Text & "' "
         'ici vous ouvrez une connection à la base de données        
         db_informatique.connecting_in_informatique()
         '
         ' !!! --> ICI il faut un appel à une fonction qui exécute la commande SQL !!! <---
         '
         'ici vous fermez la connection à la base de donnée
         db_informatique.disconnecting_in_informatique()
         'ici vous affichez un message (sans verifier que la requete sql c'est bien exécutée)       
         MessageBox.Show("Modification effectuée!")
         'enfin la  vous mettez votre formulaire à zéro
         Me.Mettre_au_blanc()
    End Sub
    Vous semblez ne pas connaitre les bases, vous pouvez lire les tutos de développez

  11. #11
    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
    est ce qu'il faut ajouter les fonctions de la modification et la suppression dans la classe?
    oui

    envois la liste des champs et le datatype de la table perso definit dans Access

    aussi tu devrais placer les texboxes a1 ....a15 dans un groupbox ou un panel
    pas directement sur la ta form

    on donne aussi des noms significatif aux controls
    au lieu de a1 -> matricule
    a2 -> nom
    a3 prenom
    parce si il faut que tu relises ton code dans une semaine tu ne sauras plus
    ce qu'est a12

  12. #12
    Futur Membre du Club
    Femme Profil pro
    Ecole Superieur de Technologie
    Inscrit en
    Octobre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ecole Superieur de Technologie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    D'accord Merci.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/09/2007, 10h38
  2. Réponses: 2
    Dernier message: 09/09/2007, 14h25
  3. Réponses: 8
    Dernier message: 04/06/2007, 16h20
  4. Réponses: 24
    Dernier message: 01/06/2007, 09h26
  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