bonjour j'ai un probleme au filtrage sur un dbgrid aide moi si possible voici mon code:
procedure TFidentp.Edit3Change(Sender: TObject);
begin
Datamodule1.ADOmaladeadmis.Open;
Datamodule1.ADOmaladeadmis.Filtered:=false;
//if edit3.text<>''then
//begin
Datamodule1.ADOmaladeadmis.Filter:='Nom ='+Quotedstr(Edit3.text);
//Datamodule1.ADOmaladeadmis.Filter:='Nom'+Quotedstr((Edit3.text)+'*');
Datamodule1.ADOmaladeadmis.Filtered:= true;
// end;
end;
pierrotk10d
Messages postés110Date d'inscriptionmardi 13 novembre 2007StatutMembreDernière intervention 2 février 20243 30 nov. 2012 à 16:32
Bonjour,
Chaque changement de caractère dans le TEdit3 déclenche un évènement OnChange. Imagine ce qui se passe avec ton code!
Si tu veux appliquer un filtre sur un nom complet ce n'est pas dans cet évènement que le filtrage de ta table doit s'appliquer.
Je ne sais avec quelle version de Delphi tu travailles mais regardes dans les exemples tu devrais trouver ton bonheur
merci pierrot pour ta réponse, je travaille avec delphi 5
quelle exemple j'ai pas comprit ce que tu dit quelle événement dit moi svp quelle est erreur dans mon code !?
solilog
Messages postés273Date d'inscriptionsamedi 13 juin 2009StatutMembreDernière intervention18 avril 201510 2 déc. 2012 à 12:48
Bonjour,
tu veux filtrer "table1" sur le champ "K1REC". pour cela tu utilise "Edit1" pour saisir ton filtre. exemple:
1 table1.filtered = true (toujours, ne change jamais)
2 Even table1.onfiltererecord:
procedure TForm1.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
var filt : string;
lng : integer;
begin
filt := trim(edit1.text); // on vire les spaces en deb et fin de filtre
lng := length(filt); // longueur du filtre
// on prend le record si - filtre vide
// ou si les "lng" 1er char de K1REC = edit1.text
accept:= (lng=0)
or (filt = copy( table1.fieldbyname('k1REC').asstring, 1, lng));
end;
3 Even edit1.Onchange:
procedure TForm1.Edit1Change(Sender: TObject);
begin
// à chaque saisie on ferme et réouvre la table
if table1.active then table1.close;
table1.open;
end;
4 on n'utilise pas le champ table1.filter, qui n'est utile que dans des sélections simples.
Donc à chaque char saisi dans Edit1, tu réouvres table1.
qui pour chaque record, executera filterrecord qui acceptera ou pas.
Merci beaucoup solilog tu a vraiment ma aidé mais j'ai une question est ce que je fais la meme chose pour filtrer le prenom je travaille sur une base medical l'orsque je saisie le nom et prenom je voulait un filtre sur un dbgrid qui affiche les resultats
le nom et prenom sont deux champs le filtrage sur le nom marche bien mais sur le prénon ne marche pas si possible donne moi le code complet voisi mon code:
procedure TDataModule1.ADOmaladeadmisFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
var filt : string;
lng : integer;
begin
filt := trim(Fidentp.edit3.text);// on vire les spaces en deb et fin de filtre
//filt := trim(Fidentp.edit2.text);
lng := length(filt); // longueur du filtre
// on prend le record si - filtre vide
// ou si les "lng" 1er char de nom = edit3.text
accept:= (lng=0)
//or (filt = copy( datamodule1.adomaladeadmis.fieldbyname('Nom').asstring+ ' '
//+ datamodule1.ADOmaladeadmis.fieldbyname('Prénom').asstring, 1, lng));
or (filt = copy( datamodule1.adomaladeadmis.fieldbyname('Nom').asstring,
1, lng));
bon bonjour solilog j’attends pas que vous faire mon travaille et je suis ingénieur en informatique je travaille avec php et java je suis débutant en delphi c pour ça je pose les question mais c tu veut pas ma aidé c pas une problème merci.