Remplir un combobox avec les champs d'une table mySQL

Résolu
cs_Fred2468 Messages postés 32 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 15 janvier 2010 - 11 janv. 2010 à 13:54
cs_Fred2468 Messages postés 32 Date d'inscription mercredi 27 mai 2009 Statut Membre 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 !

29 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 janv. 2010 à 09:46
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
1
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 janv. 2010 à 14:17
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
0
cs_Fred2468 Messages postés 32 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 15 janvier 2010
11 janv. 2010 à 15:24
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 janv. 2010 à 15:41
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Fred2468 Messages postés 32 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 15 janvier 2010
12 janv. 2010 à 13:47
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 janv. 2010 à 14:08
le nom des champs tu veux dire ?

faire un OpenSchema (voir doc MSDN)

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
cs_Fred2468 Messages postés 32 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 15 janvier 2010
12 janv. 2010 à 14:32
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 janv. 2010 à 14:36
euh...

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




Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 janv. 2010 à 14:43
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
0
cs_Fred2468 Messages postés 32 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 15 janvier 2010
12 janv. 2010 à 14:54
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 !
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 janv. 2010 à 14:57
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
0
cs_Fred2468 Messages postés 32 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 15 janvier 2010
13 janv. 2010 à 09:16
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 !
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 janv. 2010 à 09:20
voir mon commentaire ci dessus...

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
cs_Fred2468 Messages postés 32 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 15 janvier 2010
13 janv. 2010 à 09:42
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
0
cs_Fred2468 Messages postés 32 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 15 janvier 2010
13 janv. 2010 à 09:57
Ok,

J'essaie et je vous redit ! :)

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

Merci beaucoup !
0
cs_Fred2468 Messages postés 32 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 15 janvier 2010
15 janv. 2010 à 08:37
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 janv. 2010 à 09:45
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
0
cs_Fred2468 Messages postés 32 Date d'inscription mercredi 27 mai 2009 Statut Membre Dernière intervention 15 janvier 2010
15 janv. 2010 à 10:39
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 janv. 2010 à 10:42
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
0
Rejoignez-nous