hajeur_abd
Messages postés46Date d'inscriptionlundi 4 avril 2005StatutMembreDernière intervention25 septembre 2007
-
26 mai 2005 à 10:04
vincentstryckmans
Messages postés228Date d'inscriptionlundi 5 avril 2004StatutMembreDernière intervention25 octobre 2006
-
27 mai 2005 à 08:22
Bonjour,
Je me demande est ce qu'on peut filtrer une TDBGrid par un champ TDateTimePicker.
Merci.
vincentstryckmans
Messages postés228Date d'inscriptionlundi 5 avril 2004StatutMembreDernière intervention25 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
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.
vincentstryckmans
Messages postés228Date d'inscriptionlundi 5 avril 2004StatutMembreDernière intervention25 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.