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 :

Le filtre est une sous-chaine


Sujet :

Bases de données Delphi

  1. #1
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut Le filtre est une sous-chaine
    Bonjour à vous tous,
    Je pense un peu m'être mal exprimer dans l'intitulé de ce post mais je n'ai pas trouvé mieux .Je m'explique :
    Je dispose d'une table paradox,et je voudrai réaliser un filtre sur cette table de la manière suivante:
    L'utilisateur introduira qu'une partie du mot à rechercher et filtrer (Par rapport à un champ précis)...Je sais je sais ce n'est toujours pas clair.Y a pas mieux qu'un bon exemple pour bien m'expliquer la chose :
    Si l'utilisateur introduit la valeur 1408 (pour le champ Numéro par exemple),je voudrai que le résultat du filtre donne tous les enregistrements dont le champ Numéro contient la sous-chaine 1408 .(ex: 23140836 sera dans la table filtrée).



    La première solution qui me vient à la tête est d'appliquer le filtre
    manuellement en implémentant une fonction qui teste l'appartenance d'une sous-chaine à une chaine:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Appart(string :sschaine,string :chaine):boolean

    Ensuite faire appel à cette fonction pour tout les enregistrements de la table.Si le résultat est TRUE alors insérer l'enregistrement pointé dans une deuxième table....


    Ca me parait un peu trop lourd tous ça!!( et ça impliquerai l'utilisation d'une deuxième table)
    Y aurait il un moyen plus simple?


    PS:J'utilise des tables Paradox et la propriété Filter.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  2. #2
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Tu as l'événement OnFilterRecord pour filtrer les enregistrements de façon quelconque :
    - Tu définis la propriété Filtered à true pour que le filtre s'applique.
    - Sur l'événement OnFilterRecord, tu codes la condition pour que l'enregistrement soit conservé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm2.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
    begin
      Accept := pos(sschaine, DataSet.FieldByName('Numero').asString) > 0;
    end;
    Chaque fois que le DataSet doit se positionner sur un enregistrement (Open, Next, Locate, FindKey...) il va commencé par vérifier si l'enregistrement n'est pas filtré. Si c'est le cas, il ignore l'enregistrement comme s'il n'existait pas.
    Mais ça veut bien dire que le test est fait à chaque déplacement du curseur. Selon les cas, ça peut affecter les performances...

    Sinon, tu as l'opérateur LIKE mais je ne suis pas sûr que Paradox l'acceptera sur une propriété Filter. Moi c'est ce que j'utilise, mais c'est sur des composants spécifiques.

  3. #3
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Vous m'avez épargné un long bout de code
    grace à l'événement OnFilterRecord et aussi la fonction Pos que j'allais implémenter alors qu'elle existe dèja

    Merci à vous Franck SORIANO.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  4. #4
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Bonsoir,

    Normalement on peut utiliser l'opérateur LIKE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    query1.Close;
    query1.SQL.Clear;
    query1.SQL.Add('SELECT * From article where numero LIKE "%'+Edit1.Text +'%"');
    query1.OPen;
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

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

Discussions similaires

  1. [RegEx] extraction d'une sous chaine
    Par zulkifli dans le forum Langage
    Réponses: 2
    Dernier message: 24/03/2006, 13h27
  2. Recherche une sous-chaine dans un champ ?
    Par nerick dans le forum Requêtes
    Réponses: 3
    Dernier message: 06/03/2006, 13h46
  3. je cherche une sous chaine dans une chaine
    Par avprive dans le forum C++
    Réponses: 3
    Dernier message: 17/03/2005, 01h48
  4. Rechercher une sous chaine dans une chaine
    Par annedjomo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/02/2005, 10h36
  5. Rechercher une sous chaine dans une chaine
    Par Oluha dans le forum ASP
    Réponses: 4
    Dernier message: 03/02/2005, 14h39

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