VB.NET remplir des textbox via combobox?

Résolu
autodidacte3 Messages postés 58 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 25 décembre 2014 - 15 août 2013 à 14:40
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 16 août 2013 à 15:28
Bonjour,

Comment remplir des textbox depuis une base de données Access selon le choix dans une combobox ?

Impatient de lire vos réponses.
Merci.

Pour remplier ma combobox :

    Private Sub Connexion()

        '«Configurer une connexion à la base de données. 
        Dim Dbpath As String = "F:\VB\mesPRG\ComptabiliteSolution\Comptabilite\bin\Debug\Contacts.mdb"
        Dim dbConn As New System.Data.OleDb.OleDbConnection( _
  "Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" & Dbpath)
        'Ouvrir une connexion et une commande SELECT. 
        'Dim dbConn As OleDbConnection
        Dim exec As OleDbCommand
        Dim lire As OleDbDataReader
        Dim host As String
        Dim req As String
        Dim ds As New DataSet
        'Dim dr As DataTableReader
        host = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source =F:\VB\mesPRG\ComptabiliteSolution\Comptabilite\bin\Debug\Contacts.mdb"
        req = "SELECT DISTINCT Amis.NOperations, Amis.ID, ficheEngage.ID2 FROM (Amis INNER JOIN ficheEngage ON ficheEngage.ID2 = Amis.ID) ORDER BY Amis.ID"
        dbConn = New OleDbConnection
        dbConn.ConnectionString = host
        Try
            dbConn.Open()
            exec = New OleDbCommand(req, dbConn)
            lire = exec.ExecuteReader
            Do While lire.Read()
                ComboBox1.Items.Add(lire("NOperations"))
                ComboBox2.Items.Add(lire("ID"))
            Loop

            lire.Close()

        Catch ex As Exception
            MessageBox.Show(ex.ToString(), "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

4 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
Modifié par cs_ShayW le 16/08/2013 à 15:29
Salut
pas si simple qui demande selon moi quelque changement

1 d'abord vaut mieux écrire la connection dans une sub à part
et tu te connectes une fois à ta bdd

2 ajoute une listof integer pour conserver les id2

tu peux écrire une requete paramétré
qui reçoit comme parametre ton ID2

ce qui donne
dans ta form

Private listid2 As New List(Of Integer)

Private Connection As New OleDb.OleDbConnection 'declares  connection

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Connexion
        ShowListAmi

    End Sub

private  Sub Connexion()

       Dim Dbpath As String = "F:\VB\mesPRG\ComptabiliteSolution\Comptabilite\bin\Debug\Contacts.mdb"
        Connection.ConnectionString = Dbpath
        Try
            Connection.Open()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

Private sub ShowListAmi() 


        Dim exec As OleDbCommand
     dim  lire As OleDbDataReader
        Dim req As String

        'Dim dr As DataTableReader

        req = "SELECT DISTINCT Amis.NOperations, Amis.ID, ficheEngage.ID2 FROM (Amis INNER JOIN ficheEngage ON ficheEngage.ID2 = Amis.ID) ORDER BY Amis.ID"

        Try
            exec = New OleDbCommand(req, Connection)
            lire = exec.ExecuteReader
            listid2.Clear() 
            Do While lire.Read()
                ComboBox1.Items.Add(lire("NOperations"))
                ComboBox2.Items.Add(lire("ID"))
               'j'ajoute iD2 à la listid2
                listid2.Add(lire("ID2"))
            Loop

            lire.Close()

        Catch ex As Exception
            MessageBox.Show(ex.ToString(), "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

'la sub qui montre les détails selon id2

private  Function ShowficheEngage(ByVal ID As Integer) As OleDbDataReader
        Dim sql As String = String.Empty
        Dim command As New OleDbCommand(sql, Connection)
        Dim recordset As OleDbDataReader

        recordset = Nothing

        command.CommandText = " SELECT field1,field2,....,FROM ficheEngage  WHERE ficheEngage.ID2 = [?] "
        command.Parameters.Add("?", OleDbType.Integer).Value = ID
        Try
            recordset = command.ExecuteReader
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
        Return recordset
    End Function

aussi au lieu de servir de plusieurs textbox tu as le datagridview
dans ton cas où tu choisis un item de combo1

Private Sub Combo1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Combo1.SelectedIndexChanged

   dim recordset as  OleDbDataReader
   Dim id As Integer
        id = Combo1.SelectedIndex
    recordset  =  ShowficheEngage(listid2(id))
     'tu n'as plus qu'à lire le recordset dans tes texxbox
     'je me servirai dans datagridview pour afficher 
     'on peut afficher tout le  recordset dans un datagridview
    ' places un datagrideview sur ta form 
      DataGridView1.Columns.Clear()
        DataGridView1.Rows.Clear()
        Dim bds As New BindingSource
        bds.DataSource =  recordset 
        DataGridView1.DataSource = bds   
    End Sub

1
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
15 août 2013 à 15:42
Salut

Comment remplir des textbox depuis une base de données Access selon le choix dans une combobox ?

en codant comme il faut !!!

que veux tu remplir dans ta textbox ?
0
autodidacte3 Messages postés 58 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 25 décembre 2014
Modifié par autodidacte3 le 15/08/2013 à 21:32
Merci à tous

cs_ShayW : mes textbox se remplissent de ma deuxième table "FicheEngage" d'après la sélection que contient la combobox qui elle même déjà chargée par la première table "Amis". la liaison est faite via l'identifiant ID des deux tables.

EX:
1ère table : les noms des fournisseurs
2ème table : le numéro, montants... des bons commande de chaque fournisseur sélectionné dans la combobox

Whismeril : je vais voir, merci
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
15 août 2013 à 22:15
d'abord
Dim ds As New DataSet n'est pas utiliser
pour le reste pas clair
mes textbox se remplissent de ma deuxième table "FicheEngage"
le champ ficheEngage.ID2 ?
tu remplis deux combo avec lire
tu veux après avoir choisi combo1.item et combo2.item afficher un textbox avec ficheEngage.ID2 correspondant ?
0
autodidacte3 Messages postés 58 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 25 décembre 2014
Modifié par autodidacte3 le 16/08/2013 à 13:04
Bonjour cs_ShayW
la variable "ds" c'est uniquement utilisé pour quelque essai, que j'ai oublié de la mettre en commentaire :p.
pour le reste c'est le code qui m'affiche tous les numéro d'opérations de la BDD "Amis" avec son ID, objectif atteint et satisfait du résultat. mais pour afficher les montants des opérations qui eux sont dans la deuxième table ficheEngage lier par ficheEngage.ID2=Amis.ID

Je veux après avoir choisi combo1.item afficher un textbox avec ficheEngage.ID2 et d'autres textbox avec ficheEngage.montant ... correspondant ?

merci encore de ta repense.
0
aliammor2 Messages postés 9 Date d'inscription jeudi 13 décembre 2007 Statut Membre Dernière intervention 2 juillet 2015
15 août 2013 à 17:06
J'ai pas lu ton code mais pour remplir des textbox par des comboxbox rien de plus facile;

tu crée par exemple un bouton déplacer ou copier et dans l'évenement click de ce dernier tu met :

TextBox1.text=ComboxBox1.Text

PS:Le bouton c'est juste pour la forme
--
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
15 août 2013 à 18:29
Bonjour,

tu peux utiliser le binding, ici tu trouveras un tuto, le code est en C#, mais je pense qu'en VB.NET le principe est le même.

Il est téléchargeable
0
Rejoignez-nous