IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

supprimer les doublons dans une combobox


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 479
    Par défaut supprimer les doublons dans une combobox
    Bonjour à tous

    Je cherche comment faire pour supprimer les doublons dans une combobox
    j'ai trouvé ce script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    procedure SupprimerDoublons(Strings : TStrings; CaseSensitive : boolean = True);
    var SL : THashedStringList;
    begin
      SL := THashedStringList.Create;
      try
        SL.Duplicates := dupIgnore;
        SL.CaseSensitive := CaseSensitive;
        SL.Sorted := True; // Sinon Duplicates ne fait rien !
     
        SL.Capacity := Strings.Capacity;// Allocation du tableau une fois pour toutes
        SL.AddStrings(Strings);
     
        Strings.BeginUpdate();
        try
          Strings.Clear();
          Strings.Capacity := SL.Capacity;// Allocation du tableau
          Strings.AddStrings(SL);
        finally
          Strings.EndUpdate();
        end;
        SL.Free;
      end;
    end;
    mais je ne sais pas comment l'appliquer
    A savoir que je rempli ma combobox par une boucle dans l'afterpost .
    si quelqu'un à une autre solution à me proposer ou m'expliquer un peu comment et ou appliquer cette procédure.

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut

    Comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      with ComboBox1, Items do
      begin
        Clear;
        Add('Item3');
        Add('Item1');
        Add('Item2');
        Add('Item2');
        Add('Item3');
        Add('Item1');
        SupprimerDoublons(Items, True);
      end;
    @+

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 479
    Par défaut
    Merci mais...

    VOICI MA BOUCLE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    datamodule2.AnnFour.First;
    Form1.ComboBox4.Clear;
    repeat
    form1.ComboBox4.Items.add(AnnfourNom.value);
    Form1.ComboBox4.Items.SaveToFile('C:\Program Files\Gestlab/AnnFour');
    Annfour.Next;
    until
    Annfour.Eof;
    Mais ou dois-je mettre le code que j'ai trouvé c'est là ou je me pose le problème.

  4. #4
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Juste après le until.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        //...
      until Annfour.Eof;
      SupprimerDoublons(form1.ComboBox4.Items);
    @+

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 479
    Par défaut
    je suis d'accord mais

    cette procedure elle va ou ????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    procedure SupprimerDoublons(Strings : TStrings; CaseSensitive : boolean = True);
    var SL : THashedStringList;
    begin
      SL := THashedStringList.Create;
      try
        SL.Duplicates := dupIgnore;
        SL.CaseSensitive := CaseSensitive;
        SL.Sorted := True; // Sinon Duplicates ne fait rien !
     
        SL.Capacity := Strings.Capacity;// Allocation du tableau une fois pour toutes
        SL.AddStrings(Strings);
     
        Strings.BeginUpdate();
        try
          Strings.Clear();
          Strings.Capacity := SL.Capacity;// Allocation du tableau
          Strings.AddStrings(SL);
        finally
          Strings.EndUpdate();
        end;
        SL.Free;
      end;
    end;

  6. #6
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Ben le plus simple est de la mettre dans la même unité que celle où se fait l'appel.

    Tu la places tout au début de la section implementation, pour qu'elle soit visible lors de l'appel.

  7. #7
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Bonjour pierrot67,

    Si ta Boucle est celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    datamodule2.AnnFour.First;
    Form1.ComboBox4.Clear;
    repeat
    form1.ComboBox4.Items.add(AnnfourNom.value);
    Form1.ComboBox4.Items.SaveToFile('C:\Program Files\Gestlab/AnnFour');
    Annfour.Next;
    until
    Annfour.Eof;
    Pourquoi tu passe par un combobox ? si c'est pour la Clear dés ton premier passage...
    Tu peux essayer comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Procedure maProcedure;
    Var
      FourNom: Tstringlist;
    Begin
      FourNom := TStringList.Create;
      Try
        FourNom.Duplicates := dupIgnore;
        FourNom.Sorted := True;    
        With DataModule2.AnnFour do
        Begin
         First;
         While Not Eof do
         begin
           FourNom.Add(AnnfourNom.value);
           next;
         end;
        end;
        FourNom.SaveToFile('C:\Program Files\Gestlab/AnnFour');
      Finally
        FourNom.Free;
      end;
    end;
    Ce qui me chagrine c'est le AnnfourNom.value qui devrait plutot etre un FieldByName('AnnfourNom').Value en aillant AnnfourNom comme champ.

    Voir si besoin de Try...Finally dans le With DataModule.AnnFour, il manque apriori de open et close


  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 937
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 937
    Par défaut
    Pourquoi ne pas remplir ce combo depuis une requête dédiée

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select MonChamp from MaTable group by MonChamp

    Ensuite sauver un fichier avec ce nom C:\Program Files\Gestlab/AnnFour, ben c'est pas possible . Le slash est un caractère illégal !

Discussions similaires

  1. supprimer les doublons dans une table
    Par mavean dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/06/2019, 13h26
  2. Supprimer les doublons dans une vue
    Par Le Marlou dans le forum SQL
    Réponses: 3
    Dernier message: 29/08/2008, 15h53
  3. Supprimer les doublons dans une table!
    Par Kirou dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/06/2008, 15h37
  4. [vbexcel]Comment supprimer les doublons dans une combobox?
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 24/11/2005, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo