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 :

Probleme dans la Recherche (Filter)


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut Probleme dans la Recherche (Filter)
    Salut a tous
    Recherche par Query ma fait des probleme alors jai décider de la faire par Filter
    Pourquoi cette fontion ne fait pas la recherche comme la fonction "Like"
    elle cherche seulement le debut de Nom
    comment la modifer pour quelle cherche Le contenue (Debut ou milieu ou fin) de Nom ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBGrid1.DataSource.DataSet.Filter:= ('[Nom]=' + QuotedStr(Edit1.Text+'*'));
    Merci davance.

  2. #2
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Citation Envoyé par ABBAN270 Voir le message
    Salut a tous
    Recherche par Query ma fait des probleme alors jai décider de la faire par Filter
    Pourquoi cette fontion ne fait pas la recherche comme la fonction "Like"
    elle cherche seulement le debut de Nom
    comment la modifer pour quelle cherche Le contenue (Debut ou milieu ou fin) de Nom ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBGrid1.DataSource.DataSet.Filter:= ('[Nom]=' + QuotedStr(Edit1.Text+'*'));
    Merci davance.
    Bonsoir,

    Nous ignorons quel SGBD vous utilisez.
    Avec Firebird, j'ai l'habitude d'utiliser la fonction "CONTAINING", elle permet de rechercher n'importe quelle chaine(au début, au milieu ou à la fin) contenue dans un mot.

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par NABIL74 Voir le message
    Bonsoir,

    Nous ignorons quel SGBD vous utilisez.
    Avec Firebird, j'ai l'habitude d'utiliser la fonction "CONTAINING", elle permet de rechercher n'importe quelle chaine(au début, au milieu ou à la fin) contenue dans un mot.
    Paradox

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Recherche par Query m'a fait des problemes
    peut être parce que votre requête était mal écrite tout simplement en tout cas j'ai toujours privilégié une requête à un filtre, bien que avec Paradox ce soit moins justifié.

    Ce que vous cherchez c'est tout simplement le filtre Like
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBGrid1.DataSource.DataSet.Filter:= ('Nom like '+QuotedStr('*'+Edit1.Text+'*'));
    maintenant pas sûr que cela fonctionne à tout les coups, cela dépend également d'un autre truc que vous n'avez pas indiqué : le groupe de composants utilisés (ADO, BDE ...) .
    une autre solution serait d'utiliser l'évènement onFilterRecord du Dataset, de mémoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm1.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
    begin
      Accept := Pos(Edit1.text,DataSet['Nom'].AsString)>0;
    end;
    N.B. voir aussi les fonctions AnsiContainsText, AnsiContainsStr ... de l'unité StrUtils

    @Nabil je préfère SIMILAR TO à CONTAINING
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Pour Paradox. dans une requête le spécificateur générique est ".."
    Exemple "..e.." tous les mots qui contiennent la lettre e
    Par contre de mémoire sur le filtre tu peux mette "e.." et pas '..e.."

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    tu es sûr de ces '..' ?
    en fait ce n'était pas mon '*' initial (que j'ai corrigé dans ma réponse) mais un '%' quoique, avec le Filter, j'ai un doute

    [Edit] après divers essais et consultation de l'aide

    Citation Envoyé par Aide D7 : Filter, propriété (TBDEDataSet)
    Pour filtrer des chaînes en utilisant des comparaisons partielles, utilisez un astérisque comme caractère générique. Par exemple*:
    State = 'M*'
    Like n'est pas permis dans une expression de filtre (du moins en ce qui concerne les composants BDE)
    Citation Envoyé par Aide D7 : Définition de la propriété Filter
    Les opérateurs logiques et de comparaison suivants permettent de comparer les valeurs des champs à des littéraux et à des constantes :

    Opérateur Signification
    < Inférieur
    > Supérieur
    >= Supérieur ou égal
    <= Inférieur ou égal
    = Egal
    <> Différent
    AND Teste si deux instructions valent toutes deux True
    NOT Vérifie que l'instruction suivante ne vaut pas True
    OR Vérifie qu'au moins une des deux instructions vaut True
    + Ajoute des nombres, concatène des chaînes, ajoute des nombres à des valeurs date/heure (disponible seulement pour certains pilotes)
    - Soustrait un nombre d'un autre, une date d'une autre ou un nombre d'une date (disponible seulement pour certains pilotes)
    * Multiplie deux nombres (disponible seulement pour certains pilotes)
    / Divise deux nombres (disponible seulement pour certains pilotes)
    * caractère générique pour des comparaisons partielles (FilterOptions doit inclure foNoPartialCompare=false)
    Ce qui fait que dans une expression de filtre:
    - le caractère de remplacement est bien l'astérisque (*)
    - il n'y a pas d'opérateur Like pour les filtres
    - la seule utilisation de l'astérisque (*) se fait à la fin d'une chaine comme par exemple : tous les enregistrements don la colonne CLE commence par 'A' Filter :='CLE = '+QuotedStr('A*'); (indiqué dans l'aide)
    Citation Envoyé par Aide FilterOptions
    Quand une chaîne d'un filtre se termine par un astérisque (*), elle peut être utilisée pour des correspondances partielles. Pour désactiver les correspondances partielles, incluez la valeur foNoPartialCompare dans FilterOptions.
    Alors que pour une requête SQL on utilisera le pourcentage (%) comme caractère générique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //commence par 'A'  
    SELECT * FROM TEST WHERE CLE LIKE 'A%'
    //contient     'A'  
    SELECT * FROM TEST WHERE CLE LIKE '%A%'
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    Les composants utilisés Sont:
    Table1
    Datasource1
    Dbgrid1
    et voila le message d'erreur apres le test
    Nom : Capture.PNG
Affichages : 748
Taille : 8,4 Ko

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Je parlais du groupe de composant de connexion (BDE, ADO ou autre) soit respectivement pour une table (TTable, TADOTable ...)
    bon je pense qu'il s'agit de TTable et donc BDE

    voila le message d'erreur apres le test
    et de quel test s'agit-il ?

    Il me semble que vous n'avez tenu aucun compte de mon dernier post #6
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    oui les connection sont par BDE
    mais....a propos de Poste#6
    jais pas compris que je doit faire

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par ABBAN270 Voir le message
    j'ai pas compris que je doit faire
    au vu de ce que vous voulez faire : Utiliser l'évènement OnFilterRecord

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
    begin
      Accept := Pos(Edit1.text,Table1.FieldByName('Nom').AsString)>0; 
      // ou  Accept := Pos(UpperCase(Edit1.text),Uppercase(Table1.FieldByName('Nom').AsString))>0; // Case insensitive 
      // ou Accept:=AnsiContainsText(Edit1.Text,Table1.FieldByName('Nom').AsString); // Case insensitive 
      // ou Accept:=AnsiContainsStr(Edit1.Text,Table1.FieldByName('Nom').AsString);
    end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    il affiche ce message d'erreur quand je tape une lettre
    Nom : Capture.PNG
Affichages : 726
Taille : 8,4 Ko

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Si au moins vous indiquiez votre code pour moi, ce second message indique que vous avez écrit un filtre (propriété Filter) incorrect
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  13. #13
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    Si au moins vous indiquiez votre code pour moi, ce second message indique que vous avez écrit un filtre (propriété Filter) incorrect
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm2.Edit1Change(Sender: TObject);
    begin
    DBGrid1.DataSource.DataSet.Filtered := True;
    DBGrid1.DataSource.DataSet.Filter:= ('Nom like '+QuotedStr('*'+Edit1.Text+'*'));
    end;
     
     
    procedure TForm2.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
    begin
      Accept := Pos(UpperCase(Edit1.text),UpperCase(Table1.FieldByName('Nom').AsString))>0;
    end;

  14. #14
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm2.Edit1Change(Sender: TObject);
    begin
    DBGrid1.DataSource.DataSet.Filtered := True;
    //<s> DBGrid1.DataSource.DataSet.Filter:= ('Nom like '+QuotedStr('*'+Edit1.Text+'*'));</s>
    //   like n'est pas utilisable  cf  Aide D7 : Définition de la propriété Filter
    //  la seule recherche de correspondance partielles se fait par égalité et l'* ne peut se trouver qu'en fin de chaine
    end;
     
     
    procedure TForm2.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
    begin
      Accept := Pos(UpperCase(Edit1.text),UpperCase(Table1.FieldByName('Nom').AsString))>0;
    end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  15. #15
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 178
    Points : 44
    Points
    44
    Par défaut
    Ah ok jais bien compris
    merci beaucoup Sergio

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

Discussions similaires

  1. problem avec la recherche d'une valeur dans les table
    Par anilane dans le forum Bases de données
    Réponses: 6
    Dernier message: 25/05/2007, 19h35
  2. probleme dans la recherche (car arabs إ أ ء ئ)
    Par nsanabi dans le forum Oracle
    Réponses: 1
    Dernier message: 02/03/2007, 11h14
  3. Probleme dans mon code recherche dans un fichier Xml
    Par dederfred dans le forum Delphi
    Réponses: 11
    Dernier message: 21/10/2006, 16h51
  4. Réponses: 3
    Dernier message: 18/03/2006, 19h51
  5. Réponses: 2
    Dernier message: 10/10/2005, 02h25

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