Recherche/Filtrage Multicriteres dans une base de donnees a l'aide d'une combobo
Aklissj5
-
26 oct. 2012 à 18:21
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 2015
-
30 oct. 2012 à 11:57
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 ;)
PythonGreg
Messages postés68Date d'inscriptionjeudi 3 novembre 2011StatutMembreDernière intervention 6 février 2015 26 oct. 2012 à 19:35
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
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
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)...)