DbGrid recherche

[Résolu]
Signaler
Messages postés
65
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
5 décembre 2005
-
Messages postés
65
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
5 décembre 2005
-
Bonjour,
voilà je fait une recherche dans mon Db grid à l'aide du filtre en utilisant ce code

procedure TForm1.Edit1Change(Sender: TObject);
var Filtre : string;
begin Filtre :'Nom''' + Edit1.Text + '*''';
if Edit1.Text ='' then
begin
clientdataset1.Filtered:=false;
exit;
end;
clientdataset1.Filter := Filtre;
clientdataset1.Filtered := true;
ça fonctionne bien mais je suis obligé de respecter majuscule et minuscule est il possible d'éviter cela.
Merci
Didier

3 réponses

Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Ca fait toujours plaisir de se décarcasser pour apporter une réponse à une question et de voir qu'on n'est même pas remercié. :(
J'en tirerai les conséquences qui s'imposent en ce qui te concerne. :sad)
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
May Delphi be with you
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
L'utilisation de la propriété Filter d'un ensemble de données a ses limites.
Sans compliquer les choses, voire même en simplifiant le code, l'utilisation de l'évènement OnFilterRecord apporte beaucoup de souplesse.
Démonstration : mettons d'abord la propriété Filtered à vrai si le contenu de Edit1 n'est pas vide
procedure TFrmMain.Edit1Change(Sender: TObject);
begin
  clientdataset1.Filtered := Edit1.Text <> EmptyStr;
end;


Ensuite, traitons le contenu de chaque ligne dans l'évènement OnFilterRecord et ne tenant pas compte de la casse des caractères :
procedure TFrmMain.clientdataset1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin  Accept :AnsiCompareText(DataSet.FieldByName('Nom').AsString, Edit1.Text) 0;
end;


Si tu utilises des champs persistants, alors il vaut mieux les utiliser pour gagner encore en performances :
procedure TFrmMain.clientdataset1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin  Accept :AnsiCompareText(clientdataset1Nom.AsString, Edit1.Text) 0;
end;


Comme tu le vois (ou tu le devines), l'utilisation de OnFilterRecord fait que l'on peut mettre autant de critères de filtrages que l'on veut et obtenir une souplesse de fonctionnement incomparable à celle de la modification de propriété Filter.
De plus, dans le cas présent, nous n'avons utilisé QUE deux lignes de codes... :big)
Elle est pas belle la vie ? :approve)

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
May Delphi be with you
Messages postés
65
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
5 décembre 2005
1
je viens à l'instant ce retouver ce post et je m'aperçoit en effet que je n'est
pas répondu, c'est un peu tard mais merci beaucoups et milles excuses
la prochaine fois je ferais plus attention
Didier