problème de Date lorsque l'intervalle est à cheval sur 2 mois...

problème de Date lorsque l'intervalle est à cheval sur 2 mois... - SQL/NoSQL - Programmation

Marsh Posté le 10-06-2005 à 14:08:39    

salut à tous !
j'ai une fonctionnalité de recherche qui donne la possibilité de trouver des enregistrements selon leur date, à plus ou moins X jours. Ca fonctionne à peu près mis à part pour un cas particulier : prenons un exemple
j'ai un enregistrement daté au 26/11/2005, je fais une recherche à la date du 27/11/2005 à plus ou moins X jours. Si X = 1 alors pas de problème, l'enregistrement est trouvé. Pas de problème jusqu'à X = 3. Le problème arrive quand on change de mois.
La requete ... and date_rappel>#26/11/2005# and date_rappel<#28/11/2005# marchera alors que la requete ... and date_rappel>#22/11/2005# and date_rappel<#02/12/2005# ne marchera pas...quelqu'un a une idée ?
j'allais oublier, je ne sais pas si c'est important mais je travaille avec Access et ASP pour l'interface

Reply

Marsh Posté le 10-06-2005 à 14:08:39   

Reply

Marsh Posté le 10-06-2005 à 14:21:03    

c'est toujours important de préciser avec quel SGBD on travaille ;)  
 
tu devrais te pencher sur la documentation de access et les fonctions de date, tous les sgbd en proposent donc je pense qu'access aussi (je c pas je l'utilise pas ;) )  
il doit exister des fonctions genre date_add() avec lesquelles tu peux ajouter un certain nombre de jours, de mois ,d'années .. que sais-je de millénaires ? à une date donnée, et ca te gère très bien les changement de mois, etc
sinon des fonctions de comparaison de dates sont surement disponibles aussi, et apparemment tu ne les utilise pas ?  
je c pas, j'espère avoir compris ton pb :)

Reply

Marsh Posté le 10-06-2005 à 14:28:22    

et un between c'est mieu que des > et < qui se baladent à toutes les sauces :o

Reply

Marsh Posté le 10-06-2005 à 14:28:56    

Vu la manière dont sont écrits les exemples, j'ai l'impression que tu travailles sur des champs "texte" plutôt que sur des champs "date" ? :whistle:
 
edit : nan, en fait avec Access, on peut avoir les dates dans ce format. Mais il faut quand même bien définir les champs avec le type "date".


Message édité par mrbebert le 10-06-2005 à 14:31:05
Reply

Marsh Posté le 10-06-2005 à 14:30:43    

Ben nan, avec des #, c'est bien reconnu comme des dates.
 
Par contre, vu le comportement, en effet, dans la base, c'est pas sur que ce soit des dates...

Reply

Marsh Posté le 10-06-2005 à 14:34:54    

non vous n'avez pas compris...(ou alors c'est moi qui m'exprime mal :whistle:)
la fonction DateAdd je l'utilise, ce que je vous ai copié collé c'est le résultat final, c'est-à-dire un bout de la chaine de caracteres dont je me sert pour ouvrir le resultSet
voila mon code :

Citation :

chaine = chaine & " and date_rappel>#" & DateAdd("d",-(Request.Form("cb_date_rappel" )),Request.Form("tf_date_rappel" )) & "# and date_rappel<#" & DateAdd("d",Request.Form("cb_date_rappel" ),Request.Form("tf_date_rappel" )) & "#"


 
je travaille bien sur des champs date
et pour les between j'ai essayé mais soit ca ne marche soit je ne sais pas m'en servir...
 
en tout cas merci pour votre rapidité de réponse ;)

Reply

Marsh Posté le 10-06-2005 à 14:36:25    

Arjuna a écrit :

Ben nan, avec des #, c'est bien reconnu comme des dates.
 
Par contre, vu le comportement, en effet, dans la base, c'est pas sur que ce soit des dates...


 
les champs de la base sont bien au format Date...

Reply

Marsh Posté le 10-06-2005 à 14:38:32    

Soit le format de date est différent entre ASP et Access (étrange) soit dans ta base Access, c'est pas une date.
 
Parceque ton code est bon, et le fonctionnement est correct.
 
Utilisation du bidule... euh... du between :

Code :
  1. SELECT bidule
  2. FROM machin
  3. WHERE truc BETWEEN chouette AND chose

Reply

Marsh Posté le 10-06-2005 à 14:39:35    

niiico a écrit :

les champs de la base sont bien au format Date...


ben c'est bizarre ton bidule, parceque entre #, Access sait que tu lui passes des dates, donc mise à part s'il fait un tri ablpabétique, y'a pas de raison que ça ne marche pas.

Reply

Marsh Posté le 10-06-2005 à 14:40:22    

tu peux toujours utiliser la fonction cdate() (dans la requête, pas dans l'asp) histoire de forcer access à bien comprendre que c'est une date que tu lui passes entre #

Reply

Marsh Posté le 10-06-2005 à 14:40:22   

Reply

Marsh Posté le 10-06-2005 à 14:46:59    

j'ai essayé cdate() et ca ne change rien...est il possible qu'il y ait un probleme de conversion date francaise/date us ?

Reply

Marsh Posté le 10-06-2005 à 15:08:14    

s'il y avait un pb de conversion , je pense qu'il te gueulerait dessus vite fait ;) dans ton exemple en plus , 28 n'est pas un mois existant donc ca me paraîtraît bizarre....
 
enfin bon, vu que je ne maîtrise ni l'asp ni access, je v me taire :)

Reply

Marsh Posté le 10-06-2005 à 15:14:34    

mwé...c'est quand meme louche tout ca...

Reply

Marsh Posté le 10-06-2005 à 16:22:28    

j'y ai pensé aussi à la conversion...
 
mais en plus, l'ASP tournant logiquement sur ma même machine qu'Access, et chacun des deux tournant sous la même session, et utilisants tous deux les paramètres de la session pour le format de date, j'ai du mal à concevoir qu'ils puissent ne pas se comprendre à ce niveau là :)

Reply

Marsh Posté le 11-06-2005 à 11:42:19    

personne d'autre n'a une petite idée ?

Reply

Marsh Posté le 13-06-2005 à 12:15:55    

j'ai un peu rebidouillé tout ca et maintenant je suis certain de la source du probleme : c'est bien une histoire de format de date. En effet, between #25/05/2005# and #04/06/2005# me sortira les enregistrements du 6 avril au 25 mai...
donc comment faire comprendre que le format est francais ?


Message édité par niiico le 13-06-2005 à 12:28:51
Reply

Marsh Posté le 13-06-2005 à 13:53:18    

prend le problème à l'envers si tu ne peux pas répondre à ta question ..  
comment transformer faire tes tests avec des dates au format anglais ?  
 :)

Reply

Marsh Posté le 13-06-2005 à 13:56:03    

euh...quoi ?
tu veux dire que je dois faire mes trucs en travaillant au format anglais ?

Reply

Marsh Posté le 13-06-2005 à 14:01:41    

pas forcément :) mais tu peux les convertir juste pour faire ta requête non ?  
d'ailleurs est-tu sûr que en mettant dans ta base 04/06/2005 dans un champ date, il ne considère pas qu'il s'agit du 6 avril 2005 ?

Reply

Marsh Posté le 13-06-2005 à 14:50:26    

ca marche !
merci à tous pour vos réponses !
 
je mets le code de conversion au cas ou quelqu'un aurait le meme probleme que moi :  

Citation :


date_deb = DateAdd("d",-(Request.Form("cb_date_rdv" )),Request.Form("tf_date_rdv" ))
date_deb = month(date_deb) &"/"& day(date_deb) &"/"& year(date_deb)
date_fin = DateAdd("d",Request.Form("cb_date_rdv" ),Request.Form("tf_date_rdv" ))
date_fin = month(date_fin) &"/"& day(date_fin) &"/"& year(date_fin)
chaine = chaine & " and date_rdv between #" & date_deb & " 00:00# and #" & date_fin & " 23:59#"

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed