Remplir ComboBox avec DataTable [Résolu]

cs_filou 98 Messages postés mercredi 19 décembre 2001Date d'inscription 15 janvier 2008 Dernière intervention - 3 août 2007 à 17:03 - Dernière réponse : equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention
- 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
Afficher la suite 

21 réponses

Répondre au sujet
cs_filou 98 Messages postés mercredi 19 décembre 2001Date d'inscription 15 janvier 2008 Dernière intervention - 5 août 2007 à 10:54
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_filou
cs_filou 98 Messages postés mercredi 19 décembre 2001Date d'inscription 15 janvier 2008 Dernière intervention - 3 août 2007 à 17:06
0
Utile
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
Commenter la réponse de cs_filou
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 4 août 2007 à 09:28
0
Utile
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
@+
Commenter la réponse de equinoxe83
cs_filou 98 Messages postés mercredi 19 décembre 2001Date d'inscription 15 janvier 2008 Dernière intervention - 4 août 2007 à 09:49
0
Utile
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
Commenter la réponse de cs_filou
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 4 août 2007 à 09:51
0
Utile
As-tu essayé avec le générateur de requètes de VWD (à moins que tu utilise un autre environnement de développement )?
Commenter la réponse de equinoxe83
cs_filou 98 Messages postés mercredi 19 décembre 2001Date d'inscription 15 janvier 2008 Dernière intervention - 4 août 2007 à 10:53
0
Utile
Je suis sous MS visual studio ??
On le rouve ou ce générateurs de requêtes ??

@+ FiloU
Commenter la réponse de cs_filou
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 4 août 2007 à 11:03
0
Utile
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.
Commenter la réponse de equinoxe83
cs_filou 98 Messages postés mercredi 19 décembre 2001Date d'inscription 15 janvier 2008 Dernière intervention - 4 août 2007 à 11:03
0
Utile
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 ????
Commenter la réponse de cs_filou
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 4 août 2007 à 11:05
0
Utile
Je pense que c'est ton tri qui est mal conçu ...
Teste avec ce que je viens de t'envoyer (voir plus haut)
Commenter la réponse de equinoxe83
cs_filou 98 Messages postés mercredi 19 décembre 2001Date d'inscription 15 janvier 2008 Dernière intervention - 4 août 2007 à 11:40
0
Utile
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
Commenter la réponse de cs_filou
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 4 août 2007 à 11:43
0
Utile
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 ....
 
Commenter la réponse de equinoxe83
cs_filou 98 Messages postés mercredi 19 décembre 2001Date d'inscription 15 janvier 2008 Dernière intervention - 4 août 2007 à 12:06
0
Utile
Il n'y à aucun insert dans tous mon projet.
Si je consulte ma table sôus Access j'ai 3 enregistrements différents
@+FiloU
Commenter la réponse de cs_filou
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 4 août 2007 à 12:11
0
Utile
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 ?
Commenter la réponse de equinoxe83
cs_filou 98 Messages postés mercredi 19 décembre 2001Date d'inscription 15 janvier 2008 Dernière intervention - 4 août 2007 à 12:23
0
Utile
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
Commenter la réponse de cs_filou
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 4 août 2007 à 12:35
0
Utile
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 ?
Commenter la réponse de equinoxe83
cs_filou 98 Messages postés mercredi 19 décembre 2001Date d'inscription 15 janvier 2008 Dernière intervention - 4 août 2007 à 12:47
0
Utile
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
Commenter la réponse de cs_filou
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 4 août 2007 à 13:03
0
Utile
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 ?
Commenter la réponse de equinoxe83
cs_filou 98 Messages postés mercredi 19 décembre 2001Date d'inscription 15 janvier 2008 Dernière intervention - 4 août 2007 à 14:28
0
Utile
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
Commenter la réponse de cs_filou
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 4 août 2007 à 19:08
0
Utile
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
Commenter la réponse de equinoxe83
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 6 août 2007 à 11:26
0
Utile
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.
@+
Commenter la réponse de equinoxe83

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.

Remplir ComboBox avec DataTable - page 2