autodidacte3
Messages postés58Date d'inscriptionmardi 21 juillet 2009StatutMembreDernière intervention25 décembre 2014
-
15 août 2013 à 14:40
cs_ShayW
Messages postés3258Date d'inscriptionjeudi 26 novembre 2009StatutMembreDerniè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
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
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
cs_ShayW
Messages postés3258Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 201956 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 ?
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 ?