Filtrage d'une TDBGrid avec un champ date

Résolu
hajeur_abd
Messages postés
46
Date d'inscription
lundi 4 avril 2005
Statut
Membre
Dernière intervention
25 septembre 2007
- 26 mai 2005 à 10:04
vincentstryckmans
Messages postés
228
Date d'inscription
lundi 5 avril 2004
Statut
Membre
Dernière intervention
25 octobre 2006
- 27 mai 2005 à 08:22
Bonjour,
Je me demande est ce qu'on peut filtrer une TDBGrid par un champ TDateTimePicker.
Merci.

4 réponses

vincentstryckmans
Messages postés
228
Date d'inscription
lundi 5 avril 2004
Statut
Membre
Dernière intervention
25 octobre 2006

26 mai 2005 à 13:07
Le plus simple, à mon sens, est de filtrer la datasource du TDBGrid sur base de la date du TDateTimePicker.

L'exécution du filtrage peut être lancé dans l'event OnChange du TDateTimePicker.

Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.

Vincent Stryckmans.
3
vincentstryckmans
Messages postés
228
Date d'inscription
lundi 5 avril 2004
Statut
Membre
Dernière intervention
25 octobre 2006

27 mai 2005 à 08:17
L'exemple que je donne affiche une liste de personne nées de telle date à telle date :

Structure de la table (naissance) qui sera à la base du datasource :

date_naissance : Date

nom : varchar(50)

prenom : varchar(50)



Dans le datamodule de ton application, tu dois avoir les composants suivants :

un TQuery qui sera le dataset du datasource, on le nommera ici sq_naissance

un TDatasource qui est donc lié avec le TQuery, on le nommera ici ds_naissance



Dans la form, le TDBGrid (grid_naissance) qui te permettera d'afficher le contenu du TDatasource et TDateTimePicker (filtre_naissance) pour adapter la date.


La propriété sql de sq_naissance contiendra la requête suivante :

select nom, prenom from naissance where date_naissance = :date_naissance order by nom ascending, prenom ascending

Le :date_naissance est en fait un
paramètre que tu devras passer au query avant de l'ouvrir. Cela te
permettera de sélectionner uniquement les personnes nées à une date
précise; celle donnée par filtre_naissance le TDateTimePicker.





Tu écris une procédure qui permet de modifier le query :

procedure adapter_sq_naissance_date(date_filtre as TDate);

begin

with sq_naissance do

begin

if active then close; // on ferme le query pour modifier le paramètre :date_naissance

ParamValues['date_naissance'].asdate := date_filtre; // on adpate le filtre sur la date de naissance

open; // On ouvre à nouveau le query sq_naissance

end;

end; // procedure adapter_sq_naissance_date(date_filtre asdate)



Dans l'event OnChange de filtre_naissance, tu ajoute le code suivant :

adapter_sq_naissance_date(filtre_naissance.date);



A chaque fois que le TDateTimePicker sera changé, le query sera adapté
et l'affichage des données dans le TDBGrid suivra. Le tour est joué.



N'oublie pas de changer la date par défaut du
TDateTimePicker au lancement de ton application. Comme cela, l'event
OnChange sera exécuté et le query adapté.



Le code qui concerne le query est normalement universel quelque soit le
type de bases de données que tu utilises. Pour Interbase, je sais que
c'est bon.

A toi de l'adpater si nécessaire. Pour Interbase, par exemple, il faut
lier le query à une transaction que j'ouvre et ferme via les events
BeforeOpen et Afterclose du query.



Voilà j'espère que cela pourra t'aider. J'écris ce code à la volée, de
grand matin, il y a peut-être des erreurs. N'hésite pas à le dire.



Bonne prog.



Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.

Vincent Stryckmans.
3
vincentstryckmans
Messages postés
228
Date d'inscription
lundi 5 avril 2004
Statut
Membre
Dernière intervention
25 octobre 2006

27 mai 2005 à 08:22
Tu peux pousser plus le filtrage de tes données si tu souhaites par exemple lister les personnes nées entre deux dates.

Le query s'écrirar alors :



select nom, prenom from naissance where date_naissance between :date_naissance_1 and :date_naissance_2



Tu as alors deux TDateTimePicker et tu n'adaptes plus le query lors de
l'event OnChange d'un des TDateTimePicker mais, par exemple, via le
OnClick d'un TButton.

Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.

Vincent Stryckmans.
3
hajeur_abd
Messages postés
46
Date d'inscription
lundi 4 avril 2005
Statut
Membre
Dernière intervention
25 septembre 2007

26 mai 2005 à 22:18
Salut,


j'ai essayeé et rien ne se passe.SVP donnez mois une explication plus detaillé.


Merci.


Hejer
0