Remplir ComboBox avec DataTable

Résolu
cs_filou
Messages postés
98
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
15 janvier 2008
- 3 août 2007 à 17:03
equinoxe83
Messages postés
240
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
18 février 2011
- 6 août 2007 à 11:28
Bonjour,
Je remplis une ComboBox avec une DataTable de cette façon

OuvreBase(

"SELECT C_NomConcours, C_IdConcours FROM Concours ORDER BY C_NomConcours",
"cl25m.mdb",
"Concours")

'C_Date, C_Discipline, C_NomTable Cl25m_DataAdapter.Fill(Cl25m_DataSet,

"Concours")cboConcours.Items.Clear()
''Indiquer quelle colonne affichercboConcours.DisplayMember "C_NomConcours"cboConcours.ValueMember

"C_IdConcours"cboConcours.DataSource = Cl25m_DataTable

'.Tables("Concours")

cboConcours.Refresh()

Le ComboBox affiche bien tous les enregistrement de la table mais ils sont affiché plusieurs.

FiloU

21 réponses

cs_filou
Messages postés
98
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
15 janvier 2008

5 août 2007 à 10:54
Salut equinoxe83 et merci.
Je suis aller générer une requete SQL avec le générateur mais je n'ai pas tester car je fait ma base avec Access et je l'ouvre avec le code.
Ou je ne suis pas encore au clair c'est sur les Clear, Close et Nothing des DataAdapter, Dataset, Datarow ect ect..

Bon dimanche FiloU
3
cs_filou
Messages postés
98
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
15 janvier 2008

3 août 2007 à 17:06
Re,
La dernière ligne de mon post est en réalité :
Le ComboBox affiche bien tous les enregistrement de la table mais ils sont affiché plusieurs fois
Merci FiloU
0
equinoxe83
Messages postés
240
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
18 février 2011

4 août 2007 à 09:28
Bonjour,
A mon avis, c'est ta requète qui ne va pas.
Tu as tenté de la tester directement (via le générateur de requètes, par exemple). Je penche sur ton orderBy (il manque notamment un guillemet avant C_NomConcours du orderby
@+
0
cs_filou
Messages postés
98
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
15 janvier 2008

4 août 2007 à 09:49
Salut et merci
J'ai tout essayé :
"SELECT C_NomConcours, C_IdConcours FROM Concours ORDER BY C_NomConcours", "cl25m.mdb", "Concours")
"SELECT * FROM Concours ORDER BY C_NomConcours",
"cl25m.mdb",
"Concours")
"SELECT C_NomConcours, C_IdConcours FROM Concours",
"cl25m.mdb",
"Concours")
"SELECT C_NomConcours, C_IdConcours FROM Concours;",
"cl25m.mdb",
"Concours")
"SELECT * FROM Concours;"
,
"cl25m.mdb",
"Concours")

@+ FiloU
0

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

Posez votre question
equinoxe83
Messages postés
240
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
18 février 2011

4 août 2007 à 09:51
As-tu essayé avec le générateur de requètes de VWD (à moins que tu utilise un autre environnement de développement )?
0
cs_filou
Messages postés
98
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
15 janvier 2008

4 août 2007 à 10:53
Je suis sous MS visual studio ??
On le rouve ou ce générateurs de requêtes ??

@+ FiloU
0
equinoxe83
Messages postés
240
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
18 février 2011

4 août 2007 à 11:03
Dans l'explorateur de base de données (s'il n'apparaît pas, tu l'active dans le menu affichage de VS), tu pointes ta table, clic droit, afficher les données de la table.
Tu va avoir un nouvel onglet avec le contenu de ta table.
Au dessus de l'onglet (dans le concepteur de requète), il y a un bouton "SQL" (afficher le volet sql) sur lequel tu clique.
Il va te donner la requête de base :
select * from ma table
Tu modifie la requête avec ce que tu souhaites tester puis tu la teste en faisant clic droit, executer SQL.
Le résultat est affiché dans la zone inférieure de ta fenêtre.
0
cs_filou
Messages postés
98
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
15 janvier 2008

4 août 2007 à 11:03
Je n'y comprend plus rien.
J'ai essayé avec une autre table et la les enregistrements sont affiché 2 fois contre 4 avec la table concours ????
0
equinoxe83
Messages postés
240
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
18 février 2011

4 août 2007 à 11:05
Je pense que c'est ton tri qui est mal conçu ...
Teste avec ce que je viens de t'envoyer (voir plus haut)
0
cs_filou
Messages postés
98
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
15 janvier 2008

4 août 2007 à 11:40
J'ai essayé avec le concepteur de requêtes Il me donne ca (j'avais aussi testé) :



SELECT C_NomConcours, C_Date, C_Discipline, C_IdConcours, C_NomTable FROM Concours

mais le résultat est toujours le même
0
equinoxe83
Messages postés
240
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
18 février 2011

4 août 2007 à 11:43
Si avec une telle selection, tu as les éléments trois fois ...
Ben c'est tout simple ... tu as trois fois les éléments dans ta base !
Donc, je te suggère de vérifier ta procédure d'insertion (qui doit insérer trois fois) ou alors lors des consultations, tu fais un insert.
Bref, ça tourne autour de ça ....
 
0
cs_filou
Messages postés
98
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
15 janvier 2008

4 août 2007 à 12:06
Il n'y à aucun insert dans tous mon projet.
Si je consulte ma table sôus Access j'ai 3 enregistrements différents
@+FiloU
0
equinoxe83
Messages postés
240
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
18 février 2011

4 août 2007 à 12:11
Je comprends pas bien ...
Tu as une base sql ou acces ?
Lorsque tu parles de 3 enregistrements différents tu évoques quoi ? 3 engestitrements totalement différents ??
C'est à dire que ta table ne comporte que 3 enregistrements au total ?
0
cs_filou
Messages postés
98
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
15 janvier 2008

4 août 2007 à 12:23
J'ai une table Access :
OuvreBase("SELECT C_NomConcours, C_IdConcours FROM Concours ORDER BY C_NomConcours",
"cl25m.mdb",
"Concours")

Un truc bizarre j'ai essayé de remplir ma combo de cette façon :

Do
While Cl25m_DataTable.Rows.Count - 1 <> i
   cboConcours.Items.Add(Cl25m_DataTable.Rows(i).Item(
"C_Date"))
   i = i + 1

Loop
La propriété Count me donne 16 alors que si je consulte la table sous Access j'ai bien 3 enregistrements
@+FiloU
0
equinoxe83
Messages postés
240
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
18 février 2011

4 août 2007 à 12:35
OK.
Donc l'objet : Cl25m_DataTable contient plusieurs fois les enregistrements.
Tu peux nous montrer comment tu initialise ta connexion (le datasource) et comment tu peuples ta datatable stp ?
0
cs_filou
Messages postés
98
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
15 janvier 2008

4 août 2007 à 12:47
Voici comment j'ouvre ma base

Public

Sub OuvreBase(
ByVal sSQL
As
String,
ByVal sNomBase
As
String,
ByVal sNomTable
As
String)

sConnect =
"Provider=Microsoft.Jet.OLEDB.4.0;" & _

"Data Source = " & Application.StartupPath &
"" & sNomBase &
";"
''Connection base
Cl25m_Connection =
New OleDbConnection

'Donner à la propriété ConnectionString les paramètres de connexion
Cl25m_Connection.ConnectionString = sConnect

''Ouvrir la connection
Cl25m_Connection.Open()

''Instancier un objet commande
Cl25m_Command =
New OleDbCommand(sSQL)

''Instancier un objet Adapter
Cl25m_DataAdapter =
New OleDbDataAdapter(Cl25m_Command)

''init objet command
Cl25m_Command.Connection = Cl25m_Connection

'Avec l'aide de la propriété Fill du DataAdapter charger le DataSet
Cl25m_DataAdapter.Fill(Cl25m_DataSet,
CStr(sNomTable))

'Mettre dans un Objet DataTable une table du DataSet
Cl25m_DataTable = Cl25m_DataSet.Tables(
CStr(sNomTable))

''Premier enregistrement
iNumLigne = 0

End
Sub

Appel OuvreBase :
OuvreBase(

"SELECT C_NomConcours, C_Date, C_Discipline, C_IdConcours, C_NomTable FROM Concours"
,
"cl25m.mdb",
"Concours")

Le reste du code :

Cl25m_DataAdapter.Fill(Cl25m_DataSet,
"Concours")
cboConcours.Items.Clear()

cboConcours.DisplayMember =
"C_NomConcours"
cboConcours.ValueMember =
"C_IdConcours"
cboConcours.DataSource = Cl25m_DataSet.Tables(
"Concours")
cboConcours.Refresh()

Merci d'avance 2 jours que je sèche
@+FiloU
0
equinoxe83
Messages postés
240
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
18 février 2011

4 août 2007 à 13:03
Pas de Pb!
Si ce n'est que tu ne fermes pas ta connexion en fin de procédure, (Cl25m_Connection.Close()), je ne vois pas ou est le Pb.

Mais si on revient( je m'excuses d'avance ...) sur le générateur de requète, en plaçant simplement
"select * from concours", il affiche quoi ?
0
cs_filou
Messages postés
98
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
15 janvier 2008

4 août 2007 à 14:28
J'AI TROUVE

J'ai ajouter
Cl25m_DataSet.Clear()
avan
t
Cl25m_DataAdapter.Fill(Cl25m_DataSet,
"Concours")

Ce qui m'amène à une autre question comment fermer proprement les bases/tables et autre pour les réouvrir sans prob..

Dans le cas du combo j'avais supprimer pour essai toutes les ouvertures de table avant le code pour le combo.
@+FiloU
0
equinoxe83
Messages postés
240
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
18 février 2011

4 août 2007 à 19:08
Do'u lintérêt de tester via le générateur de requête ... que tu semble ne pas avoir fait, du coup ... Dommage, on aurai gagné du temps .
Pour ton close, regarde simplement la remarque de mon mail précédent.
Bye
0
equinoxe83
Messages postés
240
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
18 février 2011

6 août 2007 à 11:26
essaye le lien suivant.
http://msdn2.microsoft.com/fr-fr/library/zz890s97(VS.80).aspx
ça devrait t'aider à mieux visualiser l'accès aux données.
@+
0