[Vb.net 2005]_Routine Sub renvoyant DataTable vide ?

Résolu
Gwendal3 Messages postés 60 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 15 août 2011 - 5 oct. 2006 à 20:40
Gwendal3 Messages postés 60 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 15 août 2011 - 7 oct. 2006 à 12:07
Bonjour,

Mon but est de créer un sub me permettant de charger le dataset de différentes tables
Table N° 1 = > 1 DataAdapter, 1 DataSet, 1 DataTable
Table N° 2 => 1 DataAdapter, 1 DataSet, 1 DataTable

J'ai un formulaire "Form1" contenant:
3 boutons (cmdChargerVehicule, cmdChargerRepertoire, cmdTousCharger)
3 textbox  (txtIDVehicule, txtIDRepertoire, txtVoirDataTable)
2 DataGridView (dgvVehicule, dgvRepertoire)

Voici le code

Imports System
Imports System.Data
Imports System.Data.OleDb

Public Class Form1

#Region "Déclaration des variables"

    '  Déclaration Objet Connexion
    Private objConnexion As OleDbConnection
    ' Paramètres de connexion à la base
    Private strConnexion As String
    ' String contenant la 'Requête SQL'
    Private strSql As String
    ' Déclaration Objet Commande
    Private objCommand As OleDbCommand
    ' Pour recompiler les données modifiées avant de les remettre dans le "DataAdapter"
    Private objCommandBuilder As OleDbCommandBuilder

    ' !=> Véhicule <=!
    '  Déclaration Objet DataAdapter
    Private objDataAdapterVehicule As OleDbDataAdapter
    ' Déclaration Objet DataSet
    Private objDataSetVehicule As New DataSet()
    ' Déclaration Objet DataTable
    Private objDataTableVehicule As DataTable
    ' Déclaration Objet DataRow (ligne)
    Private objDataRowVehicule As DataRow

    ' !=> Répertoire <=!
    ' Déclaration Objet DataAdapter
    Private objDataAdapterRepertoire As OleDbDataAdapter
    ' Déclaration Objet DataSet
    Private objDataSetRepertoire As New DataSet()
    ' Déclaration Objet DataTable
    Private objDataTableRepertoire As DataTable
    ' Déclaration Objet DataRow (ligne)
    Private objDataRowRepertoire As DataRow

#End Region

    Private Sub InitConnexionTest(ByVal strSqlFiltre As String, ByVal PassDataAdapter As OleDbDataAdapter, _
                                  ByVal PassDataSet As DataSet, ByVal PassDataTable As DataTable, _
                                  ByVal PassNomtable As String)

        Try

            ' Vider le DataSet
            PassDataSet.Clear()

            'Initialisation de la chaîne de paramètres pour la connexion
            strConnexion = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                            "Data Source =" & Application.StartupPath & "\Source\Parc Vehicule.mdb;"

            'Initialisation de la chaîne contenant l'instruction SQL
            strSql = strSqlFiltre

            'Instanciation d'un objet Connexion
            objConnexion = New OleDbConnection()
            'Donner à la propriété ConnectionString les paramètres de connexion
            objConnexion.ConnectionString = strConnexion

            'Ouvrir la connexion
            objConnexion.Open()

            'Instancier un objet Commande
            objCommand = New OleDbCommand(strSql)
            'Instancier un objet Adapter
            PassDataAdapter = New OleDbDataAdapter(objCommand)
            'Initialiser l'objet Command
            objCommand.Connection() = objConnexion
            'Avec l'aide de la propriété Fill du DataAdapter charger le DataSet
            PassDataAdapter.Fill(PassDataSet, PassNomtable)
            'Mettre dans un objet DataTable une table du DataSet
            PassDataTable = PassDataSet.Tables(PassNomtable)

        Catch ex As Exception
            'Message d'erreur
            MessageBox.Show(ex.ToString, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)

        Finally
            ' Fermer la connexion
            objConnexion.Close()

        End Try

    End Sub

    Private Sub cmdChargerVehicule_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdChargerVehicule.Click

        Dim strFiltreVehicule As String
        strFiltreVehicule = "SELECT Tbl_Vehicule.* " & _
                            "FROM Tbl_Vehicule " & _
                           "WHERE Tbl_Vehicule.ID_Vehicule = " & Me.txtIDVehicule.Text & ";"

        InitConnexionTest(strFiltreVehicule, objDataAdapterVehicule, objDataSetVehicule, objDataTableVehicule, "FicheVehicule")

        Me.dgvVehicule.DataSource = objDataSetVehicule
        Me.dgvVehicule.DataMember = "FicheVehicule"

    End Sub

    Private Sub cmdChargerRepertoire_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdChargerRepertoire.Click

        Dim strFiltreRepertoire As String
        strFiltreRepertoire = "SELECT Tbl_Repertoire.* " & _
                              "FROM Tbl_Repertoire " & _
                              "WHERE Tbl_Repertoire.ID_Repertoire = " & Me.txtIDRepertoire.Text & ";"

        InitConnexionTest(strFiltreRepertoire, objDataAdapterRepertoire, objDataSetRepertoire, objDataTableRepertoire, "FicheRepertoire")

        Me.dgvRepertoire.DataSource = objDataSetRepertoire
        Me.dgvRepertoire.DataMember = "FicheRepertoire"

    End Sub

    Private Sub cmdTousCharger_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdTousCharger.Click

        Dim strFiltreVehicule As String
        strFiltreVehicule = "SELECT Tbl_Vehicule.* " & _
                            "FROM Tbl_Vehicule " & _
                            "WHERE Tbl_Vehicule.ID_Vehicule = " & Me.txtIDVehicule.Text & ";"

        InitConnexionTest(strFiltreVehicule, objDataAdapterVehicule, objDataSetVehicule, objDataTableVehicule, "FicheVehicule")

        Dim strFiltreRepertoire As String
        strFiltreRepertoire = "SELECT Tbl_Repertoire.* " & _
                              "FROM Tbl_Repertoire " & _
                              "WHERE Tbl_Repertoire.ID_Repertoire = " & objDataTableVehicule.Rows(0).Item("ID_TblRepertoire").ToString & ";"

        InitConnexionTest(strFiltreRepertoire, objDataAdapterRepertoire, objDataSetRepertoire, objDataTableRepertoire, "FicheRepertoire")

        Me.dgvVehicule.DataSource = objDataSetVehicule
        Me.dgvVehicule.DataMember = "FicheVehicule"

        Me.dgvRepertoire.DataSource = objDataSetRepertoire
        Me.dgvRepertoire.DataMember = "FicheRepertoire"

    End Sub

End Class

Lorsque je souhaite charger une table dans un dataset, j'appelle InitConnexionTest en précisant:
strSqlFiltre As String
PassDataAdapter As OleDbDataAdapter
PassDataSet As DataSet
PassDataTable As DataTable
PassNomtable As String

Le problème est ici

        Dim strFiltreRepertoire As String
        strFiltreRepertoire = "SELECT Tbl_Repertoire.* " & _
                              "FROM Tbl_Repertoire " & _
                              "WHERE Tbl_Repertoire.ID_Repertoire = " & objDataTableVehicule.Rows(0).Item("ID_TblRepertoire").ToString & ";"

Lorsque j'ai voulu vérifier la valeur de objDataTableVehicule.Rows(0).Item("ID_TblRepertoire").ToString
en faisant Me.txtVoirDataTable.Text = objDataTableVehicule.Rows(0).Item("ID_TblRepertoire").ToString j'ai eu la même erreur.

Le problème viens donc de mon DataTable qui est nul. Mais pourquoi ?
Si je mets charge avec le bouton cmdChargerRepertoire en indiquant une valeur le chargement est correct....

Comme faire ?

Merci d'avance.

Gwendal

Le message d'erreur

L'exception System.NullReferenceException n'a pas été gérée
  Message="La référence d'objet n'est pas définie à une instance d'un objet."
  Source="Gestion Parc"

2 réponses

linasteph Messages postés 153 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 juillet 2009 1
6 oct. 2006 à 10:23
Bonjour,

dans la déclaration de ta fonction InitConnexionTest essaie de mettre ByRef PassDataTable As DataTable au lieu de byval
@+
3
Gwendal3 Messages postés 60 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 15 août 2011
7 oct. 2006 à 12:07
Salut,

Merci beaucoup

Gwendal
0
Rejoignez-nous