Filtrage avancé d'une base de donnée

Signaler
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009
-
Messages postés
14
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
14 novembre 2011
-
Bonsoir à tous.

Je voudrais savoir si il existe un moyen de filtré l'affichage d'un etable dans un DBGrid, par ordre alphabetique.

Par exemple, je clic sur un bouton "A" et le DBGrid n'afficherait que les enregistrement commençant pas "A".

J'espere m'être bien exprimé :)

A+

3 réponses

Messages postés
53
Date d'inscription
samedi 27 mars 2004
Statut
Membre
Dernière intervention
1 août 2006

Bonjour,

J'ai 2 solutions pour toi filtrer un DBGrid, une que j'utilise pour moi filtrer quand un Edit change, ca me permet de filtrer par ordre alfphabétique sur plusieurs lettres par exemple un Client (pour moi) qui commencerais par ABE:
Mon code tiré d'une base que j'utilise:

procedure TFmClient.Edit6Change(Sender: TObject);
var Filtre : string;
begin Filtre :'Client''' + Edit6.Text + '*'''; {* Constrcuction du Filtre avec le texte saisi dans
la zone TEdit*}
if Edit6.Text ='' then // Test si il n'y a rien dans le TEdit
begin
TbSrelance.Filtered:=false; // Arrête le filtrage de la table
exit; // quitte la methode
end;
TbSrelance.Filter := Filtre; // Mise en place du filtre
TbsRelance.Filtered := true; // Activation du filtre
end;

La deuxième m'a été fourni par JMP77 (que je remercie encore pour ses bons conseils) et permet de filtrer en plusieurs couches successives; cette solution fonctionne très bien chez moi:

code:

procedure TFmFactC.Button10Click(Sender: TObject);
var Filtre:string;
begin
Filtre:='((Annee =' + QuotedStr(Edit5.Text)+ ')AND (Periode =' + QuotedStr(Edit4.Text)+ ')AND (Site =' + QuotedStr(Edit6.Text)+ ')AND (Compte =' + QuotedStr(Edit7.Text)+ '))';
TbFacToutes.Filter:= Filtre;
TbFacToutes.Filtered:= true;

Annee,Periode,Site,Compte étant les noms de champs, cette solution permet de filtrer successivement le DBGrid d'après plusieurs champs

Bonne prog et meilleurs voeux à tous

DGPat
Messages postés
14
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
14 novembre 2011
1
Bonjour
je ne trouve pas la bonne formule pour filtrer ma table sur un entier sans passer par OnfilterRecord je veux utiliséer l'événement OnchangeEdit
voila mon code source:
procedure TModifier_Patient.Edit1Change(Sender: TObject);
begin
if Adotable1.filter='' then exit;
Adotable1.filtred:=false;
AdoTable1.filter := AdoTable1['code_Patient'].Asstring + '=' + '''' + Edit1.Text + '%''';
AdoTable1.filtered := True;
end;
j'ai utilisé aussi ce code à la place du la 3eme ligne :
AdoTable1.Filter := 'inttostr(Code_Patient) LIKE ('+''''+edit1.Text+'%'+''''+')';
mais ça ne marche pas
any help please.
Messages postés
14
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
14 novembre 2011
1
j'ai fait une erreure à la 1igne 1 de ma procedure
procedure TModifier_Patient.Edit1Change(Sender: TObject);
begin
if edit1.text='' then exit;
Adotable1.filtred:=false;
AdoTable1.filter := AdoTable1['code_Patient'].Asstring + '=' + '''' + Edit1.Text + '%''';
AdoTable1.filtered := True;
end;
j'ai utilisé aussi ce code à la place du la 3eme ligne :
AdoTable1.Filter := 'inttostr(Code_Patient) LIKE ('+''''+edit1.Text+'%'+''''+')';
y a pas un moyen ou une formule magique pour fitrer une table sur un entier sans passer par l'événement OnfilterRecord , je veux utilisé l'événement OnchangeEdit.
Merci