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

Bases de données Delphi Discussion :

[TSMDBGrid] Utilisation des filtres


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut [TSMDBGrid] Utilisation des filtres
    Salut,
    utilisant la grille TSMDBGrid je rencontre un petit soucis sur la mise en place de filtre, je dois récupérer la liste des filtres d'une colonne avant de pouvoir l'affecter sinon j'obtiens une AV :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    const 
     cstRqstFiltreDuns='Select distinct tmondiale FROM Sites WHERE Orphelin<>0 and tmondiale is not null';
    begin
    ...
        TStrings(LstDuns3):=OrphelinSMDBGrid.Columns[Index].FilterList;
        LstDuns3:=TStringList.Create;
        dmPrincipal.GetListOfDistinctValue(cstRqstFiltreDuns,LstDuns3);
        OrphelinSMDBGrid.Columns[Index].FilterList:=LstDuns3;
    Existe-t-il une approche particuliére pour éviter ce pb ?

    Merci.

  2. #2
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Qu'entend tu par filtre ici donc ? tu parles des cases à cocher ou bien d'autre chose ?

  3. #3
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Ha si, ça y'est, j'entrevois la chose...

  4. #4
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Edam --> avec les FilterList de SmDBGrid, le code de Laurent est normal. Mais c'est vrai que ça a de quoi être surprenant.....


    Bon prenons la méthodes GetFilterList :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function TSMDBColumn.GetFilterList : TStrings;
    begin
      if FFilterList = nil then
        FFilterList := TStringList.Create;
      Result := FFilterList;
    end;
    Donc, en effet, par défaut, FFilterList n'est pas créée, elle est créée à partir du moment où tu la lit une première fois.

    Donc si tu n'éffectue pas cette opération, au moment ou tu lui affectes une liste que tu as créé toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     if Value = nil then   //ignoré puisque tu  affectes avec value<>nil
      begin
        FFilterList.Free;
        FFilterList := nil;
        exit;
      end;
     
      FFilterList.Assign(Value); //Access Violation puisque FFilterList=nil (si tu ne l'as pas créé en la lisant une première fois)
    Du coup, ce que je fais en général, c'est que j'initialise tous mes FilterList de colonnes dont je puisse avoir besoin dans mon FormCreate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var AList:TStringList;
    begin
      for i:=0 to SMDBGrid1.ColCount-1 do
          AList:=SMDBGrid1.Columns[i].FilterList; //L'appel en lecture à pour effet de créer la liste de filtre de la colonne
    end;

    Après et à partir de là, pour l'affectation, c'est "bateau"

  5. #5
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    waskol là j'ai rien pigé
    pour la fonction GetFilterList j'ai pigé,
    je préfère:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Procedure TSMDBColumn.GetFilterList(var FFilterList : TStrings);
    begin
      if FFilterList = nil then 
        FFilterList := TStringList.Create;
    end;
    pour celle là rien ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var AList:TStringList;
    begin
      for i:=0 to SMDBGrid1.ColCount-1 do
          AList:=SMDBGrid1.Columns[i].FilterList; //L'appel en lecture à pour effet de créer la liste de filtre de la colonne
    end;
    Alist aura à la fin quel valeur exactement
    j'ai jamai utlisé TSMDBgrid, alors c'est pourquoi -peut être- j'ai rien compris .

    [edit] je veux dire quel est la relation avec le probléme
    {edit}
    je croix comprendre un peut ce que tu veux dire waskol, je pense que j'était un peut
    alors récapitulant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TStrings(LstDuns3):=OrphelinSMDBGrid.Columns[Index].FilterList;
    ce ligne affect lstduns3 par Filterlist et en même temps si ce Filterlist n'existe pas (=nil) il est crée,,, c'est sa
    si c'est vrait alors sa sert à quoi ce ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       LstDuns3:=TStringList.Create;

  6. #6
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Oui edam, le soucis, c'est que dans le composant TSMDBGrid, on peut utiliser à une propriété des colonnes appelée FilterList, qui permet de gérer une liste de filtres pour une table d'une base de données.

    la propriété FilterList définie comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    property FilterList:TStrings read GetFilterList write SetFilterList;
    permet donc d'accéder en Lecture et en écriture à la variable FFilterList de type TString, ce qui se fait via les deux méthodes que j'ai exposé plus haut.

    Vu comme sont écrites ces méthodes, la manipulation de la propriété FilterList est piégeante à souhait...

  7. #7
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Citation Envoyé par edam
    je croix comprendre un peut ce que tu veux dire waskol, je pense que j'était un peut
    alors récapitulant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TStrings(LstDuns3):=OrphelinSMDBGrid.Columns[Index].FilterList;
    ce ligne affect lstduns3 par Filterlist et en même temps si ce Filterlist n'existe pas (=nil) il est crée,,, c'est sa
    si c'est vrait alors sa sert à quoi ce ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       LstDuns3:=TStringList.Create;

    Oui tu as parfaitement compris, et pour la dernière question, celà permet d'avoir un TStringList à manipuler, plutôt qu'un bête TStrings, classes virtuelle avec laquelle on ne peut pas tout faire (tri, gérer les éléments dupliqués ou non, etc...).

  8. #8
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    il y a un grand hic,non??
    tu affecte la lste à un variable TStringlist puis tu le crée????
    Citation Envoyé par Laurent Dardenne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    const 
     cstRqstFiltreDuns='Select distinct tmondiale FROM Sites WHERE Orphelin<>0 and tmondiale is not null';
    begin
    ...
        TStrings(LstDuns3):=OrphelinSMDBGrid.Columns[Index].FilterList;
        LstDuns3:=TStringList.Create;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utilisation des filtres excel avec une macro access
    Par alexlkds dans le forum VBA Access
    Réponses: 3
    Dernier message: 10/11/2009, 18h35
  2. Probleme avec utilisation des filtres et des modeles
    Par Djolhan dans le forum Thunderbird
    Réponses: 0
    Dernier message: 08/04/2009, 22h30
  3. [BO XIR2] sécurité : utilisation des filtres
    Par warriorfr dans le forum Administration-Migration
    Réponses: 5
    Dernier message: 14/03/2008, 09h25
  4. [ JSP ] utilisation des filtres
    Par Pi2 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 09/11/2006, 14h44
  5. [TIBCLientDataSet] Utilisation des Filtres
    Par nico27 dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 24/06/2004, 14h22

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