jdddeschamps
Messages postés13Date d'inscriptionjeudi 18 décembre 2008StatutMembreDernière intervention23 mars 2009
-
18 déc. 2008 à 22:55
jdddeschamps
Messages postés13Date d'inscriptionjeudi 18 décembre 2008StatutMembreDernière intervention23 mars 2009
-
21 déc. 2008 à 19:22
Bonjour,
Je suis confronté à un petit problème :
Il arrive que deux dates égales soient vues différentes de sorte que je sois obligé de les arrondir à trois secondes près afin qu'un test les rende égales. Exemple de code :
DateZ = rstZ("GDH")
VDateZ = DateZ 'VdateZ est de type Variant VDateZ VDateZ * 28800 '28800 24 h * 60 m * 20 s
VDateZ = Int(VDateZ) 'j'arrondie la date de l'azimut à 3 secondes près
'Récupérer l'adopté précédant immédiatement l'heure de détection
rstP.MoveLast
' DateP = rstP("GDH")
Do
DateP = rstP("GDH")
VDateP = DateP
VDateP = VDateP * 28800
VDateP = Int(VDateP) 'j'arrondie la date de l'adopté à 3 secondes près
rstP.MovePrevious
Loop While Not rstP.BOF And VDateP > VDateZ
Ainsi, si DateZ = DateP, je suis sûr que le test VDateP>VDateZ sera faux.
Si je ne fais pas cet arrondi, le test peut être parfois vrai.
Pourquoi ces dates ne sont-elles pas vues égales ? Pourtant, les valeurs de type variant sont égales (par exemple 39301,6711689815 pour les deux variables VdateP et VdateZ avant l'arrondi)
Dans une requête SQL, ça devient compliqué :
ORDER by Date1 asc, Date2 asc
Dans ce cas, tous les enregistrements pour lesquels les Date1 sont égales, sont triés par Date2.
Or il arrive que la requête ne considère pas les Date1 égales alors qu'elles le sont !
Pourquoi ?
N'y a-t-il pas un moyen plus simple que mes arrondis à 3 secondes près laborieux ?
jdddeschamps
Messages postés13Date d'inscriptionjeudi 18 décembre 2008StatutMembreDernière intervention23 mars 2009 19 déc. 2008 à 00:12
Parce que quand j'écris :
Loop While Not rstP.BOF And DateP > DateZ
Le test DateP > DateZ peut être vrai même quand les deux dates sont égales !
J'ai trouvé une réponse partielle à ce problème (il s'agit d'un problème de virgule flottante) :
http://support.microsoft.com/kb/194894/fr Cependant, cela ne résout pas mon problème dans ma requête SQL :
ORDER by Date1 asc, Date2 asc
Comment faire pour que tous les enregistrements dont les Date1 sont égales soient triés selon les Date2 ?
En effet, les problèmes de virgule flottante font que les Dates1 égales ne soient pas toujours vues égales.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 19 déc. 2008 à 05:43
vraiment étrange
tu pourrais me faire parvenir un zip avec tout cela (pas de soucis, je corrige, te renoie et j'efface chez moi, depuis le temps que je fais ce genre d'operations, d'autres peuvent attester de mon serieux et de mon integrité.)
je t'envoi mon mail par mp. a toi de voir si tu me l'envoie ou non ^^