Recherche/Filtrage Multicriteres dans une base de donnees a l'aide d'une combobo

Signaler
-
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
-
Bonjour :)

Bon voila le topo :D

Je veux pouvoir effectuer des opérations de filtrage et de recherche dans les différents champs de ma base de données (Nom, prénom, adresse etc...) et cela si possible en ayant la possibilité de sélectionner le champ adéquats à l'aide d'une Combobox.

Voici le code régissant la fonction de recherche (uniquement sur le champ 'nom'):

procedure TForm1.BrechercheClick(Sender: TObject);
Var Option: TLocateOptions;
begin
If ((Table1.recordcount=0) and (table1.state<>dsinsert))then
exit;
if erechnom.Text<>'' then
begin
Option:=[loPartialKey]; //pour ne pas faire attention a la casse
Table1.Locate('nom',erechnom.Text,Option)
end;
end;


Voici le code régissant la fonction de filtrage (uniquement sur le champ 'nom'):
procedure TForm1.EfiltreNomChange(Sender: TObject);
var Filtre:string;
begin
//Construction du filtre
Filtre:='nom ='''+ efiltrenom.Text +'*''';
If ((Table1.recordcount=0) and (table1.state<>dsinsert))then
exit;
If efiltrenom.Text='' then
begin
Table1.Filtered:=false; //arrete le filtrage
exit;//quiter la méthode
end;
Table1.Filter:=Filtre; //mise en place du filtre
Table1.Filtered:=True; //activation du filtre
end;


Jusqu'ici tout fonctionne bien (sans la combobox)lol

En gros la question qui se pose est : Comment dois-je m'y prendre pour faire correspondre les champs de ma base avec les items de ma combobox pour ainsi effectuer les opération de filtrage et de recherche ?

J'espère que c'est assez claire car au départ j'avais tapé un long message explicatif que j'ai malencontreusement perdu a la suite d'une fausse manipp xD n'hésitez pas a demander des précision si besoin ;)


Merci :)

3 réponses

Messages postés
68
Date d'inscription
jeudi 3 novembre 2011
Statut
Membre
Dernière intervention
6 février 2015

Bonsoir Aklissj5

Je te conseille le composant AdoQuery
Voici un filtre sur un base de données

Procedure TForm1.ComboBox1Change (Sender : TObject) ;
Begin
AdoQuery.Active := False ;
AdoQuery.Sql.Text :?Select * form (1) Where (2) QuotedStr(ComboBox1.texte)
AdoQuery.Active := True;
End;


1 : Le nom de la Table
2 : Le nom de la Zone que tu veu filtré

Exemple :
ComboBox1.Items.add('A');
ComboBox1.Items.add('B');
ComboBox1.Items.add('C');
Exemple
- Ma table du nom : BaseD
- le champ de ma table s'appéle 'Nom'
Pour filtré tout les noms qui commence par la lettre 'B'

Procedure TForm1.ComboBox1Change (Sender : TObject) ;
Begin
AdoQuery.Active := False ;
AdoQuery.Sql.Text := ?Select * form BaseD Where Nom= QuotedStr(ComboBox1.texte)
AdoQuery.Active := True;
End;


Conclusion tout les noms qui commence par la lettre 'B' son afficher
Merci pour ta réponse :)

Avec un peu de tâtonnement j'y suis arrivé à l'aide d'une méthode beaucoup plus simple :p

J'ai ajouté ma combobox, puis j'ai inséré le code suivant dans l'évènement OnCreate de ma forme pour que les champs de ma BD correspondent avec les items de ma combobox :D

combobox1.Items:=table1.FieldList;
combobox1.Text:='';


Ensuite j'ai fait correspondre le texte sélectionné dans ma combobox avec qui doit y être affiché dans l'évènement OnSelect de ma combobox :p

combobox1.Text:=combobox1.SelText;


Et enfin, j'ai configuré mon filtre pour qu'il tienne compte du contenu de "combobox1.text" dans son opération de filtrage :P

Filtre:= combobox1.Text + '=''' + efiltrenom.Text +'*''';


Et Hop ! voila une affaire rondement mené comme dirait l'autre :D je vais de ce pas appliquer cette méthode à la fonction de recherche (ce qui, j'espère, ne me poseras pas de problèmes x)...)

Merci encore :)
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Salut,

Dans : combobox1.Text + '=''' + efiltrenom.Text +'*''';
Fais attention si ton "efiltrenom.Text" contient des apostrophes...

Simon