ADOQuery et filtrage entre deux dates

Signaler
Messages postés
58
Date d'inscription
mardi 24 avril 2007
Statut
Membre
Dernière intervention
14 juin 2011
-
Messages postés
49
Date d'inscription
samedi 26 janvier 2008
Statut
Membre
Dernière intervention
9 mars 2011
-
bonjou/Bonsoir a tous
je veux juste savoire ou se situe le probléme dans ce code

ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text := 'Select * From Stagiére where DateDinscription >= '
+ QuotedStr(DateToStr(DateTimePicker1.Date)) + 'and DateDinscription <=' + QuotedStr(DateToStr(DateTimePicker2.Date));

ImpRimerLeMouvementsDesInscrits.Preview;

je veux afficher dans un QReport la liste des stagiéres inscrits entre deux dates mais le filtrage ne march plus

merci pour votre aide

12 réponses

Messages postés
58
Date d'inscription
mardi 24 avril 2007
Statut
Membre
Dernière intervention
14 juin 2011

pour quoi vous m'aidez pas !!
Messages postés
418
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
3
Bonjour.

Tu fais une comparaison entre 2 dates converties en string.
DateToStr renvoie un string avec le format local utilisé --> '16/04/10'.
Ce qui fait que p.ex. '31/01/10' va être considéré comme supérieur à '16/04/10'. (31 > 16)
Il faut convertir la date au format année-mois-jour : soit 'yyyymmdd'.

FormatDateTime('yyyymmdd', DateTimePicker1.Date);


Puisque ton champ DateDinscription est du type caractères, tu dois d'abord le convertir en Date puis le reconvertir en string au bon format.

Pourquoi ne pas employer un champ de type Date ? C'est plus facile pour la comparaison.

A +
Thierry
Messages postés
58
Date d'inscription
mardi 24 avril 2007
Statut
Membre
Dernière intervention
14 juin 2011

merci pour votre réponse
mais comment puis je convertir le champ DateDinscription dans la requéte SQL !!
----

quand je déclare le champ datedinscription de type date il m'affiche le date puis l'heur de coté,
c pour ça j'ai déclarer ce champ de type string puis j'ai met un mask de saisie pour n'accepte que le format date;
Messages postés
418
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
3
FormatDateTime('yyyymmdd', StrToDate(DateDinscription))
Messages postés
58
Date d'inscription
mardi 24 avril 2007
Statut
Membre
Dernière intervention
14 juin 2011

et comment puis je reformuler la requéte entiére d'une maniére correcte ?
merci
Messages postés
418
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
3
Dans ton cas, le plus simple est de déclarer le champ datedinscription de type date.
Je n'ai jamais travaillé avec Ado, mais il doit y avoir un type qui ne prend en compte que la date et pas l'heure.
Sinon, tu formates le champ pour ne pas afficher l'heure.
Messages postés
58
Date d'inscription
mardi 24 avril 2007
Statut
Membre
Dernière intervention
14 juin 2011

merci bien pour votre participation je vais changer la manière de formuler la requête
à bientot
Messages postés
13
Date d'inscription
samedi 17 avril 2010
Statut
Membre
Dernière intervention
18 mai 2010

slt.tu peut le faire d'une manière plus facile. tu fait une requête Access avec les tables dont ta besoin.tu utilises deux 'DateTimePicker' avec un message dans un Label "veillez inserez une date entre :" .tu relis un ado table avec la table requte que ta créé. puis tu saisie ce code source dans un bouton 'OK' :
if datetimepicker1.date>datetimepicker2.Date then showmessage('veuillez inserez la date correctement')
else
adotable1.filtered:=true;
c mieux. j'espere que ca t'aidera
Messages postés
58
Date d'inscription
mardi 24 avril 2007
Statut
Membre
Dernière intervention
14 juin 2011

merci tadlaoui7amel
mais moi je veux afficher le liste des inscrits entre deus dates distinctes pas dans une seule date
j'ai presque une semaine compléte de recherche de solution mais pas de solution jusqu'a présent
le problème c le type date moi j'ai déclarer le champ dateDinscription de type string puis j'ai mis un mask de saisie au format date jj-mm-aaaa
et je mis le champ de type date il m'affiche l'heure à coté de lui puis le filtrage ne march plus
I'm very tired
merci bien pour votre aide
Messages postés
13
Date d'inscription
samedi 17 avril 2010
Statut
Membre
Dernière intervention
18 mai 2010

j'ai compris c bon.je verrai s ke j peux faire. keep traying ok.
Messages postés
49
Date d'inscription
samedi 26 janvier 2008
Statut
Membre
Dernière intervention
9 mars 2011

pour une date
var
d : String;
begin
d:=FormatDateTime('mm/dd/yy', Calendar1.Date);
ADOQuery1.Active := false ;
ADOQuery1.SQL.Text := 'SELECT * FROM Ma_Table WHERE Ma_date= #'+d+'#';
ADOQuery1.Active := true ;
end;

ou bien pour deux date

var
d1,d2 : String;
begin
d1:=FormatDateTime('mm/dd/yy', Calendar1.Date);
d2:=FormatDateTime('mm/dd/yy', Calendar2.Date);
ADOQuery1.Active := false ;
ADOQuery1.SQL.Text := 'SELECT * FROM Ma_Table WHERE Ma_date between #' + d1 + '# AND #' +d2 + '#';
ADOQuery1.Active := true ;
end;
Messages postés
49
Date d'inscription
samedi 26 janvier 2008
Statut
Membre
Dernière intervention
9 mars 2011

est pour la table en Access il faut que le champ soit de type date