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.


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut La référence d'objet n'est pas définie à une instance d'un objet.
    Bonsoir,

    j'affiche des données issues d'une table mysql dans un datagridview1, après avoir sélectionné un nom dans une combobox,

    lorsque je sélectionne mon premier nom dans ma combobox et que je clique sur rechercher, pas de problème le résultat de ma requête s'affiche.
    Le problème apparaît lorsque j'effectue une seconde recherche, je sélectionne un autre nom dans ma combobox et la j'obtient ce message d'erreur :

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

    Comment cela ce fait il étant donné que ma première requête fonctionne les autres requêtes le devrait aussi !

    voici mon code :

    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
    Public Class affect
        Dim HostConn As New MySqlConnection 'Pour une conexion a base de données MySQL
            Dim da2 As MySqlDataAdapter 'is use to update the dataset and datasource
        Dim dst2 As New DataSet 'miniature of your table - cache table to client
        Dim requete As String 'Chaine ou sera stocker les requetes
     
    Private Sub affect_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     HostConn.ConnectionString = "server=localhost;" _
                                         & "user id=root;" _
                                         & "password=;" _
                                         & "database=intervention"
            Try
                HostConn.Open()
            Catch myerror As MySqlException
                MessageBox.Show("Erreur de connection à la base: " & myerror.Message)
            End Try
     
    'mon bouton recherche
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
            'ici requete pour la recherche d'aprés le choix de la combo
            da2 = New MySqlDataAdapter("SELECT vehicule, fonction, count(id) AS nbr_inter FROM affect WHERE identite = '" & ComboBox1.SelectedItem & "' GROUP BY vehicule, fonction", HostConn)
            da2.Fill(dst2, "affect")
            DataGridView1.DataSource = dst2.Tables("affect")
            DataGridView1.Columns("vehicule").HeaderText = "Vehicules"
            DataGridView1.Columns("vehicule").Width = 80
            DataGridView1.Columns("fonction").HeaderText = "Fonction"
            DataGridView1.Columns("fonction").Width = 70
            DataGridView1.Columns("nbr_inter").HeaderText = "Nbrs/inters"
            DataGridView1.Columns("nbr_inter").Width = 120
            DataGridView1.AllowUserToAddRows = False
            DataGridView1.RowHeadersVisible = False
            Label2.Text = "Détail pour " & (ComboBox1.SelectedItem).ToString
            DataGridView1.Columns.Clear()
            dst2.Clear()
        End Sub
    l'erreur apparait pour cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataGridView1.Columns("vehicule").HeaderText = "Vehicules"

  2. #2
    Membre expérimenté Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Points : 1 455
    Points
    1 455
    Par défaut
    Bonsoir,

    Généralement quand tu a cette erreur c'est que l'objet que tu veux remplir n'est pas bien déclaré.

    A mon avis ça vient de ta colonne véhicule qui n'est pas encore crée quand tu cherche à la nommer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataGridView1.Columns("vehicule")

  3. #3
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    La 2ème fois il est probable que le SELECT renvoie 0 enregistrements, d'où 0 colonnes dans la DataTable.

    Il faut donc mettre un test "if (dst2.Tables("affect").Rows.Count>0)" avant les affections à "DataGridView1.Columns(...".
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

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