Filtre *texte_recherché*

nonobiker Messages postés 9 Date d'inscription jeudi 15 mai 2003 Statut Membre Dernière intervention 11 septembre 2003 - 23 mai 2003 à 16:59
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 24 mai 2003 à 21:19
Bonjour,

Je souhaite appliquer un filtre *texte_recherché* (n'importe où dans le champ) en utilisant la propriété Filter mais çà ne marche pas. Je n'ai réussi à faire fonctionner que texte_recherché* (ie commence par).

Merci
Renaud

6 réponses

cs_zmc Messages postés 147 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 26 avril 2008 1
23 mai 2003 à 17:07
et en français ca donne quoi :o) ?
0
nonobiker Messages postés 9 Date d'inscription jeudi 15 mai 2003 Statut Membre Dernière intervention 11 septembre 2003
24 mai 2003 à 10:19
C'est marrant, quand j'ai tappé le texte je savais que c'était pas super clair. Pourtant j'ai fais des efforts !

Champ d'une table
valeur 1 - Lundi
valeur 2 - Mardi
valeur 3 - Mercredi

Si je saisi dans une zone 'un' je veux que le filtre me remonte l'enregistrement Lundi.

J'espère que c'est plus clair

Renaud
0
cs_zmc Messages postés 147 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 26 avril 2008 1
24 mai 2003 à 10:21
lol je comprend toujours pas, enfin bon d'autres personne comprendrons surement ;o)

a+
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
24 mai 2003 à 12:16
Une technique simple pour celà : les patterns.
Supposons qu'un contrôle de type TEdit contienne le modèle de chaîne à rechercher (ex : *un*).
Tu mets la propriété Filtered à True de ta table :
Table1.Filtered := True;

Ensuite, tu écris un gestionnaire d'évènements OnFilterRecord sur Table1 :
uses Masks; //ne pas oublier !

procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
  Accept := MatchesMask(DataSet.FieldByName('Jour').AsString, Edit1.Text);
end;

Bien que la fonction MatchesMask soit ainsi déclarée :
function MatchesMask(const Filename, Mask: string): Boolean;

il n'y a, en aucun cas, l'obligation de ne l'utiliser qu'avec des fichiers. Les caractères génériques * et ? sont les mêmes que ceux utilisés par le DOS.

Autre technique, utiliser une requête SQL :
Select * from MaTable where Jour like "%un%"

La chaine %un% pouvant être passée en paramètre variable ou la requête pouvant être construite dans le code.
Personnellement, j'opterais pour une requête SQL, un peu plus rapide que l'utilisation de l'évènement OnFilterRecord d'un composant TTable.
May Delphi be with you
0

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

Posez votre question
nonobiker Messages postés 9 Date d'inscription jeudi 15 mai 2003 Statut Membre Dernière intervention 11 septembre 2003
24 mai 2003 à 20:24
En fait j'avais fait une requête qui fonctionnait (même syntaxe que celle que tu donnes) mais je ne peux pas mettre à jour les données ensuite => message d'erreur

Renaud
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
24 mai 2003 à 21:19
Si l'ensemble de données renvoyé par ta requête ne peut pas être mis à jour simplement, tu n'as qu'à utiliser un composant TUpdateSql.
May Delphi be with you
0
Rejoignez-nous