none
Lire données d'une base access avec visual basic RRS feed

  • Question

  • Bonjour, je dois lire  les données d'une base access avec visual basic, et j'aimerai que ces données soient stockées dans une variable pour que je puisse les tester, j'ai réussi a me connecter et déconnecter de la base mais je ne sais pas comment lire les données et les enregistrer dans des variables. Voici le début de mon code :

     

     

    Module bdaccess
        Dim MyConnection As New System.Data.OleDb.OleDbConnection()
        'procédure de connection a une bd access
        Public Sub connection()
            Try
                MyConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=C:\Documents and Settings\mdorget\Mes documents\bddfax.mdb"
                MyConnection.Open()
                MsgBox("Connexion à la base établie")
    
            Catch ex As Exception
                MsgBox("Impossible d'établir la connection à la base." & ex.Message)
            End Try
        End Sub
        'deconnection de la base
        Public Sub deconnection()
            Try
                MyConnection.Close()
                MsgBox("Déconnexion de la base établie")
            Catch ex As Exception
                MsgBox("Impossible d'établir la connection à la base." & ex.Message)
            End Try
        End Sub
    End Module
    

     


    Si vous avez des pistes je suis preneur :)

    Cordialement maxkun.


    • Modifié maxkun jeudi 29 septembre 2011 06:28
    jeudi 29 septembre 2011 06:27

Réponses

  • Bonjour,

    Il suffira donc de changer le combobox par une sotie console

     ModeleComboBox.Items.Add(MonLecteurModele.GetString(0))

    en

     Console.WriteLine(MonLecteurModele.GetString(0))

    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    • Marqué comme réponse maxkun jeudi 29 septembre 2011 13:01
    jeudi 29 septembre 2011 09:10
    Auteur de réponse
  • Bonjour,

    Je m'étais également penché il y a quelques temps là dessus. J'ai trouvé deux façons de faire soit tu passes par des requêtes, soit par une "liaison" entre un objet de ta Form et une table de ta base.

    Pour le premier cas, j'ai fait comme ceci :

     

    ModeleComboBox.Items.Clear()
    Dim maConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=Z:\maDatabase.mdb")
    Dim maCommandeModele As OleDbCommand = MaConnexion.CreateCommand()
    maCommandemodele.CommandText = "SELECT Modele FROM TableImprimantes"
    maConnexion.Open()
    Dim monLecteurModele As OleDbDataReader = maCommandeModele.ExecuteReader()
    Do While MonLecteurModèle.Read()
       ModeleComboBox.Items.Add(MonLecteurModele.GetString(0))
    Loop
    monLecteurModèle.Close()
    maConnexion.Close()
    

    Alors <<maCommandemodele.CommandText = "SELECT Modele FROM TableImprimantes">>

     

    Modele est un champs de la table TableImprimantes de ma base de données, tous les modèles d'imprimantes sont chargés dans la ComboBox de la boucle. Pour les requêtes, j'avais été sur ces sites là : Access.Developpez1 et Access.Developpez2 pour bien appréhender les requêtes et leurs subtilités.

    Pour la seconde façon, il faut aller dans le menu "Données/Ajouter une nouvelle source de données ...", mais je t'avoue que cela remonte un peu et que cela n'est pas compliqué mais je ne préfère pas te dire de bêtises.

    J'éspère t'avoir aider

    Cyril



    • Modifié Cesame jeudi 29 septembre 2011 08:40 Correction orthographique
    • Marqué comme réponse maxkun jeudi 29 septembre 2011 13:00
    jeudi 29 septembre 2011 08:39

Toutes les réponses

  • Bonjour,

    Je m'étais également penché il y a quelques temps là dessus. J'ai trouvé deux façons de faire soit tu passes par des requêtes, soit par une "liaison" entre un objet de ta Form et une table de ta base.

    Pour le premier cas, j'ai fait comme ceci :

     

    ModeleComboBox.Items.Clear()
    Dim maConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=Z:\maDatabase.mdb")
    Dim maCommandeModele As OleDbCommand = MaConnexion.CreateCommand()
    maCommandemodele.CommandText = "SELECT Modele FROM TableImprimantes"
    maConnexion.Open()
    Dim monLecteurModele As OleDbDataReader = maCommandeModele.ExecuteReader()
    Do While MonLecteurModèle.Read()
       ModeleComboBox.Items.Add(MonLecteurModele.GetString(0))
    Loop
    monLecteurModèle.Close()
    maConnexion.Close()
    

    Alors <<maCommandemodele.CommandText = "SELECT Modele FROM TableImprimantes">>

     

    Modele est un champs de la table TableImprimantes de ma base de données, tous les modèles d'imprimantes sont chargés dans la ComboBox de la boucle. Pour les requêtes, j'avais été sur ces sites là : Access.Developpez1 et Access.Developpez2 pour bien appréhender les requêtes et leurs subtilités.

    Pour la seconde façon, il faut aller dans le menu "Données/Ajouter une nouvelle source de données ...", mais je t'avoue que cela remonte un peu et que cela n'est pas compliqué mais je ne préfère pas te dire de bêtises.

    J'éspère t'avoir aider

    Cyril



    • Modifié Cesame jeudi 29 septembre 2011 08:40 Correction orthographique
    • Marqué comme réponse maxkun jeudi 29 septembre 2011 13:00
    jeudi 29 septembre 2011 08:39
  • Mon souci par rapport à toi c'est que j'ai fais une application console, donc ton modèle ne peut pas trop s'appliquer au mien puisque tu fais apparaitre les valeurs dans un ComboBox.
    jeudi 29 septembre 2011 08:47
  • Bonjour,

    Il suffira donc de changer le combobox par une sotie console

     ModeleComboBox.Items.Add(MonLecteurModele.GetString(0))

    en

     Console.WriteLine(MonLecteurModele.GetString(0))

    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    • Marqué comme réponse maxkun jeudi 29 septembre 2011 13:01
    jeudi 29 septembre 2011 09:10
    Auteur de réponse
  • Je dirai que justement c'est mon bout de code qui devrait le faire. Il suffit d'adapter la boucle, au lieu de charger une ComboBox vous pourriez y charger un tableau de chaîne par exemple, non ?


    Cordialement, Cyril
    jeudi 29 septembre 2011 09:13
  • Et bien j'ai changé la partie de code concernant les ComboBox et cela compile, cependant ça ne m'affiche rien, j'ai changé la requête pour voir ce que ça donné et l'erreur n'est pas la même en fonction de la requête (qui est très basique), voici mon code :

    Dim maConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=C:\Documents and Settings\mdorget\Mes documents\bddfax.mdb")
            Dim maCommandeModele As OleDbCommand = maConnexion.CreateCommand()
            maCommandeModele.CommandText = "Select Nom from expediteur"
            maConnexion.Open()
            Dim MonLecteurModele As OleDbDataReader = maCommandeModele.ExecuteReader()
            Do While MonLecteurModele.Read()
                Console.WriteLine(MonLecteurModele.GetString(0))
            Loop
            MonLecteurModele.Close()
            maConnexion.Close()
    

    Alors avec cette requête, j'ai une petite fenêtre qui s'affiche et me dis que "L'exception OleDbException n'a pas été gérée" et "Aucune valeur donnée pour un ou plusieurs des paramètres requis." pour la ligne de code:
    Dim MonLecteurModele As OleDbDataReader = maCommandeModele.ExecuteReader()
    

    Et si je change ma requête par "select * from expediteur" j'ai le message suivant "L'exception InvalidCastException n'a pas été gérée" et "Le cast spécifié n'est pas valide." pour la ligne de code :

    Console.WriteLine(MonLecteurModele.GetString(0))
    


    Donc j'ai l'impression que cela vient de la requête mais j'ai bien vérifié, tout est bon, je ne comprends pas.

    jeudi 29 septembre 2011 09:25
  • Apparemment vous êtes sous Windows XP, de mon coté j'avais rencontré des soucis du même genre sous un Windows 7. Il fallait absolument lancer l'application en Administrateur, pas un quelconque mais l'Administrateur local de base. Sous XP c'est moins contraignant, mais est-ce que vous êtes administrateur du poste ?

    Si j'ai du temps qui se dégage cet après-midi, je testerai l'adaptation de votre code sur mon projet pour voir.

    Cordialement,

    Cyril

    jeudi 29 septembre 2011 12:35
  • Oui je suis sous Windows XP, et en effet je ne suis pas en administrateur, je vais essayé en administrateur et je vous redirai si ça marche.
    jeudi 29 septembre 2011 12:40
  • Je viens de m'apercevoir que dans ma base de données, j'avais laissé le champ1 tel quel, c'est pour cela que ça ne marché pas, cependant il a fallu changer une petite chose dans mon code :

     

    Console.WriteLine(MonLecteurModele.GetString(1))
    

    Il fallait mettre un numéro de colonne différent de 0 pour que cela s'affiche. Donc merci à vous pour votre aide, en particulier a toi Cesame pour le code fourni :)

    jeudi 29 septembre 2011 13:00