Propriétés AddItem d'un ComboBox

Résolu
SnapFAB Messages postés 61 Date d'inscription samedi 10 novembre 2007 Statut Membre Dernière intervention 5 mars 2011 - 1 mars 2009 à 21:48
SnapFAB Messages postés 61 Date d'inscription samedi 10 novembre 2007 Statut Membre Dernière intervention 5 mars 2011 - 2 mars 2009 à 18:56
Bonsoir tout le monde,

Je charge ma ComboBox via une base de données ACCESS avec les lignes de commandes suivantes :

Set rsCHOIX = New ADODB.Recordset
rsCHOIX.Open "select * from [ART_" & cmbRESULTAT.Text & "]", cn, 1, 2
                Do Until rsCHOIX.EOF
                cmbFILTRE.AddItem rsCHOIX.Fields(0)
                rsCHOIX.MoveNext
                Loop
rsCHOIX.Close
Set rsCHOIX = Nothing

Tout ce déroule comme prévu sauf que dans mes données il y des lignes vides ainsi que des doubles ce qui augmente d'autant ma ComboBox.

Est-il possible de ne pas Ajouter les Items vide et les Doublons dans ma ComboBox ?

Par avance je vous remercie de votre aide.
Bonne soirée.

13 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
2 mars 2009 à 18:49
les ` equivalent tes [ ]

étrange, ton message... tu as simplement remplacé ta requete dans le code que tu avais avant ?

parce qu'il fonctionnait...

pense bien a faire un rsCHOIX.Close
une fois que tu as finit de jouer avec ton Recordset
3
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
1 mars 2009 à 22:02
Bonsoir,

AddItem n'est pas une propriété, mais une méthode (et ce n'est pas du tout la même chose !)
C'est ta requête elle-même qu'il convient de modifier de préférence. Cela t'évitera d'assortir la méthode AddItem de deux expression conditionnelles (une pour les vides et l'autre pour les doublons ...)
Le mieux serait d'ailleurs de ne pas utiliser du tout AddItem, mais de lier ta combobox à ton recordset (construit, lui, avec les clauses écartant vides et doublons... mais cà, c'est surtout SQL avant VB).
0
SnapFAB Messages postés 61 Date d'inscription samedi 10 novembre 2007 Statut Membre Dernière intervention 5 mars 2011
1 mars 2009 à 22:11
Bonsoir jmf0,

Désolé pour avoir mis propriété au lieu méthode, je ne savais point.

En faite c'est tout à fait normal que j'ai des doublons et des vides et je ne veux pas les bloquer pour mon programme, de ce fait je ne pense pas que lier ma combobox à mon recordset résoudra le problème cité.

Çomment est-il possible de modifier ma requête ?
0
SnapFAB Messages postés 61 Date d'inscription samedi 10 novembre 2007 Statut Membre Dernière intervention 5 mars 2011
2 mars 2009 à 00:33
J'ai trouvé pour les doublons, j'en transpire encore :)
Par contre j'ai toujours pas trouvé pour les lignes vides qui me font un blanc dans ma combo.

Pour les doublons :

Dim i As Integer
Dim Elements As New Collection

       For i = 0 To cmbFILTRE.ListCount - 1
           Call Elements.Add(cmbFILTRE.List(i), cmbFILTRE.List(i))
       Next
  
   Call cmbFILTRE.Clear
   For i = 1 To Elements.Count
       Call cmbFILTRE.AddItem(Elements(i))
   Next
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
2 mars 2009 à 10:03
non, non et non !

on ne rappatrie que le necessaire.
pas de SELECT *
mais tu cible les champs requis (vraisemblablement un seul)

et pour tes doublons, ajoutes simplement DISTINCT :

SELECT DISTINCT `monChamp` FROM `maTable`
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
2 mars 2009 à 10:04
ah oui, manque aussi le coup des lignes vides :

SELECT DISTINCT `monChamp` FROM `maTable` WHERE `monChamp`<>''


(a voir si c'est chaine vide, ou champ null)
0
SnapFAB Messages postés 61 Date d'inscription samedi 10 novembre 2007 Statut Membre Dernière intervention 5 mars 2011
2 mars 2009 à 11:34
Bonjour Renfield,

J'ai bien essayer un select distinct ma ça ne marche pas chez moi (il prend quand même les doublons), voici ma ligne de commande :

rsCHOIX.Open "select distinct * from [ART_" & cmbRESULTAT.Text & "]", cn, 1, 2

select case cmbresultat.text

                Case DATE
                Do Until rsCHOIX.EOF
                cmbFILTRE.AddItem rsCHOIX.Fields(0)
                rsCHOIX.MoveNext
                Loop
               
                Case ...

Peut être est-ce du à cause de mon select case ?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
2 mars 2009 à 11:37
cmFILTRE est bien vide, avant cette boucle ?

sinon, tu ajoutes les elements encore et encore ^^
0
SnapFAB Messages postés 61 Date d'inscription samedi 10 novembre 2007 Statut Membre Dernière intervention 5 mars 2011
2 mars 2009 à 15:46
Affirmatif, je fais un petit
cmbFILTRE.Clear avant de lancer la boucle, mais ça ne change rien les doublons sont quand même ajoutés.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
2 mars 2009 à 16:00
Gaffe a la définition de l'instruction DISTINCT.

il faut que tous les champs ramenés soient identiques d'un tuple a l'autre, pour qu'un doublon soit detecté...
et vu que tu fais un SELECT *
je pense que certains des autres champs de ton tuple ne sont pas identiques...

exemple:
Break - Renault - Laguna
Break - Renault - Megane
Berline - Renault - Clio
Berline - Renault - Megane
Berline - Renault - Laguna
Break - Citroen - C5
Break - Peugeot - 407
Break - Peugeot - 307
...

ici, avec un " SELECT DISTINCT * " on récupèrerai plein de doublon, si on voulais remplir un combo avec le type de carrosserie.

d'ou ma remarque t'invitant à "ne rappatrier que le necessaire" et de proscrire les SELECT *


cible donc ta requete SQL en un
SELECT DISTINCT `MONchamp` FROM ...
0
SnapFAB Messages postés 61 Date d'inscription samedi 10 novembre 2007 Statut Membre Dernière intervention 5 mars 2011
2 mars 2009 à 17:15
Ok, j'ai bien compris ton explication et elle est tout fait correcte, par contre comment je fais pour insérer un champ dans ma ligne ?

rsCHOIX.Open "select distinct * from [ART_" & cmbRESULTAT.Text & "]", cn, 1, 2

Les signes que tu as mis sur le message du dessus s'obtiennent avec ALT GR + 7 mais je n'arrive pas à voir où les placer, à chaque coup j'ai un message d'erreur ou il me dit select distinct from non conforme. Merci pour ton aide.
0
SnapFAB Messages postés 61 Date d'inscription samedi 10 novembre 2007 Statut Membre Dernière intervention 5 mars 2011
2 mars 2009 à 17:57
En faite voilà ou j'en suis arriver :

 rsCHOIX.Open "select DISTINCT `Dates` from [ART_" & cmbRESULTAT.Text & "]", cn, 1, 2

et j'ai un run-time error '3705'
Cette opération n'est pas autorisée si l'objet est ouvert.
0
SnapFAB Messages postés 61 Date d'inscription samedi 10 novembre 2007 Statut Membre Dernière intervention 5 mars 2011
2 mars 2009 à 18:56
Merci pour tout.
0
Rejoignez-nous