Remplir un combobox avec les champs d'une table mySQL [Résolu]

Messages postés
32
Date d'inscription
mercredi 27 mai 2009
Dernière intervention
15 janvier 2010
- 11 janv. 2010 à 13:54 - Dernière réponse :
Messages postés
32
Date d'inscription
mercredi 27 mai 2009
Dernière intervention
15 janvier 2010
- 15 janv. 2010 à 14:23
Bonjour,

Es t-il possible de remplir un ComboBox avec les champs une table mySQL ?

Il me semble qu'on peut faire un truc du genre :

sqlstr = "SELECT * FROM " & cbxListeTable ' extracts all data

conn.Open sqlstr

Mais ensuite je suis perdu pour ce qui est de placer tout sa dans un ComboBox.

Merci d'avance !
Afficher la suite 

Votre réponse

29 réponses

Meilleure réponse
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 13 janv. 2010 à 09:46
1
Merci
comme cela, mais en évitant d'utiliser

rstSchema

qui est rempli je ne sais où

comme dans mon code :

If cbxListeTable.ListIndex <> -1 Then 
    With conn.OpenSchema(adSchemaColumns, Array(Empty, Empty, cbxListeTable.Text)) 
        Do Until .EOF 
           lbxChamp.AddItem .Fields("COLUMN_NAME") 
           .MoveNext 
        Loop 
    End With 
End If 




Renfield - Admin CodeS-SourceS - MVP Visual Basic

Merci Renfield 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de Renfield
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 11 janv. 2010 à 14:17
0
Merci
te faut remplir un Recordset avec tes données, et faire une en gros:

With conn.Open("SELECT `champ1` FROM " & cbxListeTable)
    Do Until .EOF
        cbxData.AddItem .Fields("champ1").Value
        .MoveNext
    Loop
    .Close
End With


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
32
Date d'inscription
mercredi 27 mai 2009
Dernière intervention
15 janvier 2010
- 11 janv. 2010 à 15:24
0
Merci
Merci de te réponse,

L'exemple que tu ma donner ajoute "champ1" dans cbxData ?

J'ai essayer, mais un problème vien quand on fais "conn.Open(...." il n'accèpte pas..

Merci d'avance
Commenter la réponse de cs_Fred2468
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 11 janv. 2010 à 15:41
0
Merci
remplace Open par Execute
j'ai repris bêtement ce que tu as ecrit...

la méthode Open de la connection ouvre la connexion a proprement parler, en exploitant la connectionString

pour récupérer un recordset, c'est pas là ^^

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
32
Date d'inscription
mercredi 27 mai 2009
Dernière intervention
15 janvier 2010
- 12 janv. 2010 à 13:47
0
Merci
Bonjour,

J'ai réussi à faire comme vous avez dit, mais le problème est que maintenant dans mon combobox je récupère les enregistrements des champs, et moi j'aurai voulu résupérer juste les champs de la table :)

Quelqu'un à une idée ?


Merci d'avance
Commenter la réponse de cs_Fred2468
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 12 janv. 2010 à 14:08
0
Merci
le nom des champs tu veux dire ?

faire un OpenSchema (voir doc MSDN)

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
32
Date d'inscription
mercredi 27 mai 2009
Dernière intervention
15 janvier 2010
- 12 janv. 2010 à 14:32
0
Merci
Ok merci beaucoup,

J'avais déjà éffectuer cette commande, mais pour afficher mes tables :

cbxListeTable.Clear

Dim strListeTable As String

Set rstSchema = conn.OpenSchema(adSchemaTables)

Do Until rstSchema.EOF

strListeTable = rstSchema.Fields("TABLE_NAME")
'ComboBox1.Value = strListeTable
cbxListeTable.AddItem (strListeTable)

rstSchema.MoveNext
Loop

J'ai essayer de remplacer TABLE_NAME par FIELD_NAME, mais sa ne marche pas, faut-il encore changer autre chose ?

Merci
Commenter la réponse de cs_Fred2468
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 12 janv. 2010 à 14:36
0
Merci
euh...

en fait, tu n'a pas lu la doc, si ?




Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 12 janv. 2010 à 14:43
0
Merci
Allez, je te mache la chose :
Private moConn As Connection

Private Sub CcLstTables_Click()
    If CcLstTables.ListIndex <> -1 Then
        CcLstFields.Clear
        With moConn.OpenSchema(adSchemaColumns, Array(Empty, Empty, CcLstTables.Text))
            Do Until .EOF
                CcLstFields.AddItem .Fields("COLUMN_NAME")
                .MoveNext
            Loop
            .Close
        End With
    End If
End Sub

Private Sub Form_Load()
    Set moConn = New Connection
    moConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\a.mdb"
    
    CcLstTables.Clear
    With moConn.OpenSchema(adSchemaTables)
        Do Until .EOF
            CcLstTables.AddItem .Fields("TABLE_NAME")
            .MoveNext
        Loop
        .Close
    End With
    If CcLstTables.ListCount Then
        CcLstTables.ListIndex = 0
    End If
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    moConn.Close
End Sub



Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
32
Date d'inscription
mercredi 27 mai 2009
Dernière intervention
15 janvier 2010
- 12 janv. 2010 à 14:54
0
Merci
Haa super,

j'avais essayer se fameux "COLUMN_NAME", mais je l'avais marquer faux :S

Je vais me débrouiller pour la suite :)

Merci beaucoup !
Commenter la réponse de cs_Fred2468
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 12 janv. 2010 à 14:57
0
Merci
le tout est de bien écrire les contraintes ; ici le TABLE_NAME :

With moConn.OpenSchema(adSchemaColumns, Array(Empty, Empty, CcLstTables.Text))

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
32
Date d'inscription
mercredi 27 mai 2009
Dernière intervention
15 janvier 2010
- 13 janv. 2010 à 09:16
0
Merci
Bonjour,

J'ai denouveau un petit problème..tout marchais bien jusqu'à aujourd'hui, losque que je click sur un element de mon combobox il me resort dans un autre combobox tout les champs de toute les tables...je sais pas pourquoi sa fais cela tout d'un coup ! Voici le code,

ComboBox2.Clear

Dim strListeChamp As String

Set rstSchema = conn.OpenSchema(adSchemaColumns)

Do Until rstSchema.EOF

ComboBox2.AddItem (rstSchema.Fields("COLUMN_NAME"))

rstSchema.MoveNext
Loop

Merci d'avance !
Commenter la réponse de cs_Fred2468
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 13 janv. 2010 à 09:20
0
Merci
voir mon commentaire ci dessus...

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
32
Date d'inscription
mercredi 27 mai 2009
Dernière intervention
15 janvier 2010
- 13 janv. 2010 à 09:42
0
Merci
J'ai essayer de mettre cette contrainte, mais sa ne marche pas, comment avec sa on dire "Je veux les champs de cette table" ?

lbxChamp = ""

Dim strChamp As String

'Set rstSchema = conn.OpenSchema(adSchemaColumns, Array(Empty, Empty, CcLstTables.Text))

If cbxListeTable.ListIndex <> -1 Then

With conn.OpenSchema(adSchemaColumns, Array(Empty, Empty, cbxListeTable.Text))

Do Until .EOF

strChamp = rstSchema.Fields("COLUMN_NAME")

lbxChamp.AddItem (strChamp)

rstSchema.MoveNext
Loop
End With
End If


Merci
Commenter la réponse de cs_Fred2468
Messages postés
32
Date d'inscription
mercredi 27 mai 2009
Dernière intervention
15 janvier 2010
- 13 janv. 2010 à 09:57
0
Merci
Ok,

J'essaie et je vous redit ! :)

merci beaucoup !
Commenter la réponse de cs_Fred2468
Messages postés
32
Date d'inscription
mercredi 27 mai 2009
Dernière intervention
15 janvier 2010
- 13 janv. 2010 à 10:26
0
Merci
Super sa marche impec ;-)

Merci beaucoup !
Commenter la réponse de cs_Fred2468
Messages postés
32
Date d'inscription
mercredi 27 mai 2009
Dernière intervention
15 janvier 2010
- 15 janv. 2010 à 08:37
0
Merci
Bonjour bonjour,

J'ai un message d'erreur que j'arrive pas à résoudre, le voici :

Le type ne correspond pas.

Ce message surviens quand j'essaye d'afficher tout les enregistrements d'une table que je sélectionne dans une listebox. Cela marche quand j'ajoute UN SEUL enregistrement dans toute ma table, mais lorsque que j'ajoute un autre enregistrement dans nimporte quelle champ de ma table sélectionner, HOP sa plante avec se message d'erreur.. voici mon bout de code :

lbxEnre.Visible = True

lbxEnre.Clear


Dim strEnreg As String

strEnreg = lbxChamp.Value

With conn.Execute("SELECT " & strEnreg & " FROM " & ListeTable.Value)
Do Until .EOF
lbxEnre.AddItem .Fields(strEnreg).Value
.MoveNext
Loop
.Close
End With

Si vous avez une solution ?

Merci d'avance
Commenter la réponse de cs_Fred2468
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 15 janv. 2010 à 09:45
0
Merci
tu devrais échapper les noms :

("SELECT `" & strEnreg & "` FROM `" & ListeTable.Value & "` ")

gaffe, c'est pas des ' mais bien des ` (alt gr + 7)

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
32
Date d'inscription
mercredi 27 mai 2009
Dernière intervention
15 janvier 2010
- 15 janv. 2010 à 10:39
0
Merci
Merci,

J'ai essayer ce que tu ma dit, de tout séparer correctement, mais aucun chamgement, que je me met en mode Debug, l'erreur surviens lorsqu'il exécute cette ligne :

lbxEnre.AddItem .Fields(strEnreg).Value

Je pense que le problème viens de la variable "strEnreg" car j'ai mis à l'intérieur le champs séléctionner.

Merci d'avance
Commenter la réponse de cs_Fred2468
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 15 janv. 2010 à 10:42
0
Merci
non, ca ne doit pas venir de là
tu pourrais mettre 0, d'ailleurs, pour exploiter le premier (et seul) champ extrait de la base de données.

a voir la donnée a ajouter...

remplace lbxEnre par MsgBox, pour tester :

MsgBox .Fields(0).Value

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.