OVH Cloud OVH Cloud

Pb de format date Access 2000

8 réponses
Avatar
JUGE Cédric
Bonjour,

dans un formulaire j'ai créé un champ date. Format date abrégé, et un masque
de saisie 00/00/00;0;_ .

Quand je tape 666666 (66/66/66), j'ai bien un message d'erreur qui me dit
que le format date n'est pas bon. Par contre, lorsque je mets 31/09/04 (date
qui n'existe pas), access me change automatiquement à la date à la sortie de
mon champ en 04/09/1931 !!!!!

Que puis-je faire ?

Merci

8 réponses

Avatar
3stone
Bonjour monsieur le juge ;-)

"JUGE Cédric"

dans un formulaire j'ai créé un champ date. Format date abrégé, et un masque
de saisie 00/00/00;0;_ .

Quand je tape 666666 (66/66/66), j'ai bien un message d'erreur qui me dit
que le format date n'est pas bon. Par contre, lorsque je mets 31/09/04 (date
qui n'existe pas), access me change automatiquement à la date à la sortie de
mon champ en 04/09/1931 !!!!!



Je ne peux recrée cela...

Quelle version d'Access ? mise à jour ?


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome

Avatar
Raymond [mvp]
Bonjour Pierre.

Je ne peux recrée cela...

Quelle version d'Access ? mise à jour ?

si, ça marche très bien si tu entres 31/09/04. si tu entres 310904 ça

provoque une erreur.
il faut que j'y aille de ma plume car le JUGE ne vas pas comprendre.
d'abord, le fait d'indiquer les / veut dire que la valeur entrée doit être
considérée comme une date valide par access dans l'ordre de validité. Cet
ordre étant paramètres régionaux, date universelle, date autorisée dans un
format quelconque. 31/09/04 est une date autorisée dans un format quelconque
alors que 310904 ne l'est pas. Donc access accepte la date sous cette forme
et la transforme en première date valide rencontrée.
je continue ma prose pour le fun car le problème est le même pour la
fonction CDate.
citation ================ "Les variables de type Date affichent les dates au format de date reconnu
par votre ordinateur.
Les formats valides comprennent le format de date indiqué par les paramètres
régionaux de votre code et le format de date universel.
La fonction CDate reconnaît les littéraux date et heure ainsi que certains
nombres appartenant à la plage de dates autorisées.
La fonction CDate reconnaît les formats de date définis dans les paramètres
régionaux de votre système. L'ordre des jours, mois et années risque de ne
pouvoir être défini si les données sont fournies dans un format différent
des paramètres de date reconnus
" fin de citation =============== qu'en d'autres termes ces choses-là soient dites:
Il existe deux formats de date valides: la date des paramètres régionaux et
la date universelle.
C'est à dire jj/mm/aaaa et mm/dd/yyyy
règle d'évaluation d'une valeur composée:
Access évalue la valeur en format date des paramètres régionaux et si la
valeur n'est pas reconnuee elle évalue la valeur en date universelle. Si
cette dernière n'est toujours pas reconnue, access répondra
"incompatibilité de type".

faîtes un essai avec 2 champs texte Texte1 et Texte2 dans un formulaire et
entrez cette fonction vba:
Private Sub Texte1_Exit(Cancel As Integer)
Me.Texte2 = CDate(Me.Texte1)
End Sub
et regardez bien les valeurs de texte2:
10/02/2003 ---> texte2 = 10/02/2003
02/13/2003 ---> texte2 = 13/02/2003
25/31/2003 ---> incompatibilité de type
31/04/25 ------> texte2 = 25/04/1931

La valeur de texte1 est une valeur string alors que la valeur de texte2 est
une valeur date par la fonction Cdate.

Il existera toujours un doute pour le 2 mars ou le 3 fevrier, mais la valeur
composée sera toujours évaluée dans l'ordre de la méthode que j'ai indiqué
plus haut.

C'est pourquoi, vous avez intérêt de travailler avec des champs date et des
litteraux date et non avec des strings.
Toute composition correspondant à un format autorisé sera chargée telle
quelle et vous pouvez mélangez les deux types d'où l'ambiguité.
A vous de choisir votre organisation: champ texte, champ date, date
paramètres régionaux , date universelle.

Fin de prose, je vais faire ma sieste.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"3stone" a écrit dans le message de news:


Avatar
JUGE Cédric
Merci pour ces éclaircissement mais cela ne résoud pas mon problème. Je n'ai
donc aucun moyen pour que j'ai un message d'erreur pour le 31/09/04. dans
tous les cas, Access me ramenera 04/09/1931.
Je suis vraime,t dans la m..... Mon client va me faire la peau.


Bonjour Pierre.

Je ne peux recrée cela...

Quelle version d'Access ? mise à jour ?

si, ça marche très bien si tu entres 31/09/04. si tu entres 310904 ça

provoque une erreur.
il faut que j'y aille de ma plume car le JUGE ne vas pas comprendre.
d'abord, le fait d'indiquer les / veut dire que la valeur entrée doit être
considérée comme une date valide par access dans l'ordre de validité. Cet
ordre étant paramètres régionaux, date universelle, date autorisée dans un
format quelconque. 31/09/04 est une date autorisée dans un format quelconque
alors que 310904 ne l'est pas. Donc access accepte la date sous cette forme
et la transforme en première date valide rencontrée.
je continue ma prose pour le fun car le problème est le même pour la
fonction CDate.
citation ================ > "Les variables de type Date affichent les dates au format de date reconnu
par votre ordinateur.
Les formats valides comprennent le format de date indiqué par les paramètres
régionaux de votre code et le format de date universel.
La fonction CDate reconnaît les littéraux date et heure ainsi que certains
nombres appartenant à la plage de dates autorisées.
La fonction CDate reconnaît les formats de date définis dans les paramètres
régionaux de votre système. L'ordre des jours, mois et années risque de ne
pouvoir être défini si les données sont fournies dans un format différent
des paramètres de date reconnus
" fin de citation =============== > qu'en d'autres termes ces choses-là soient dites:
Il existe deux formats de date valides: la date des paramètres régionaux et
la date universelle.
C'est à dire jj/mm/aaaa et mm/dd/yyyy
règle d'évaluation d'une valeur composée:
Access évalue la valeur en format date des paramètres régionaux et si la
valeur n'est pas reconnuee elle évalue la valeur en date universelle. Si
cette dernière n'est toujours pas reconnue, access répondra
"incompatibilité de type".

faîtes un essai avec 2 champs texte Texte1 et Texte2 dans un formulaire et
entrez cette fonction vba:
Private Sub Texte1_Exit(Cancel As Integer)
Me.Texte2 = CDate(Me.Texte1)
End Sub
et regardez bien les valeurs de texte2:
10/02/2003 ---> texte2 = 10/02/2003
02/13/2003 ---> texte2 = 13/02/2003
25/31/2003 ---> incompatibilité de type
31/04/25 ------> texte2 = 25/04/1931

La valeur de texte1 est une valeur string alors que la valeur de texte2 est
une valeur date par la fonction Cdate.

Il existera toujours un doute pour le 2 mars ou le 3 fevrier, mais la valeur
composée sera toujours évaluée dans l'ordre de la méthode que j'ai indiqué
plus haut.

C'est pourquoi, vous avez intérêt de travailler avec des champs date et des
litteraux date et non avec des strings.
Toute composition correspondant à un format autorisé sera chargée telle
quelle et vous pouvez mélangez les deux types d'où l'ambiguité.
A vous de choisir votre organisation: champ texte, champ date, date
paramètres régionaux , date universelle.

Fin de prose, je vais faire ma sieste.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"3stone" a écrit dans le message de news:







Avatar
Raymond [mvp]
Erreur, Monsieur le Juge.
Commence par mettre un masque de saisie à 00/00/0000 au lieu de 00/00/00 ce
qui va déjà éliminer 100% des erreurs, dont le 31/09/04, car tu vas ainsi
indiquer qu'il faut que la date soit conforme aux paramètres régionaux ou à
la date universelle et non aux dates autorisées. Tu peux encore rajouter des
tests de validité personnels sur l'événement AfterUpdate du contrôle.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"JUGE Cédric" a écrit dans le message
de news:
Merci pour ces éclaircissement mais cela ne résoud pas mon problème. Je
n'ai
donc aucun moyen pour que j'ai un message d'erreur pour le 31/09/04. dans
tous les cas, Access me ramenera 04/09/1931.
Je suis vraime,t dans la m..... Mon client va me faire la peau.



Avatar
3stone
Salut Raymond,

"Raymond [mvp]"
[...]
alors que 310904 ne l'est pas. Donc access accepte la date sous cette forme
et la transforme en première date valide rencontrée.



Raymond, un champ défini date, avec dans le formulaire le masque
donné par le JUGE, la saisie "effectivement" réalisée est bien

310904

et dans ce cas, Access me dit que la valeur est trop grand et blabla...
et il ne corrige PAS en 04/09/31 !!!


C'est pourquoi j'ai demandé:

"Je ne peux recrée cela...
Quelle version d'Access ? mise à jour ?"

question que je répète... :-)


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome

Avatar
JUGE Cédric
pour le format 00/00/0000 effectivement ca marche mais mon client ne veut pas
se taper les 4 digits de l'année (il a plusieurs saisie à faire à la suite).
Effectivement, je peux mettre des tests en sortie de champ, mais je vais
partir sur un sacré délire, je vais être obligé de tester mois / mois et il y
a toujours le pb de février et des années bissextiles !!!!
Je ne suis pas sorti des ronces.


Erreur, Monsieur le Juge.
Commence par mettre un masque de saisie à 00/00/0000 au lieu de 00/00/00 ce
qui va déjà éliminer 100% des erreurs, dont le 31/09/04, car tu vas ainsi
indiquer qu'il faut que la date soit conforme aux paramètres régionaux ou à
la date universelle et non aux dates autorisées. Tu peux encore rajouter des
tests de validité personnels sur l'événement AfterUpdate du contrôle.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"JUGE Cédric" a écrit dans le message
de news:
Merci pour ces éclaircissement mais cela ne résoud pas mon problème. Je
n'ai
donc aucun moyen pour que j'ai un message d'erreur pour le 31/09/04. dans
tous les cas, Access me ramenera 04/09/1931.
Je suis vraime,t dans la m..... Mon client va me faire la peau.








Avatar
Raymond [mvp]
RE.

sur les versions 2000, 2003, avec les conditions suivantes:
Champ madate, type Date
Format dans formulaire : Date, abrégé
Masque de saisie : 00/00/00;0;_ .

ça passe tout droit du 31/09/04 au 04/09/1931

la solution c'est le format 00/00/0000, c'est tout.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"3stone" a écrit dans le message de news:

Salut Raymond,

"Raymond [mvp]"
[...]
alors que 310904 ne l'est pas. Donc access accepte la date sous cette
forme
et la transforme en première date valide rencontrée.



Raymond, un champ défini date, avec dans le formulaire le masque
donné par le JUGE, la saisie "effectivement" réalisée est bien

310904

et dans ce cas, Access me dit que la valeur est trop grand et blabla...
et il ne corrige PAS en 04/09/31 !!!


C'est pourquoi j'ai demandé:

"Je ne peux recrée cela...
Quelle version d'Access ? mise à jour ?"

question que je répète... :-)




Avatar
Raymond [mvp]
Faut pas délirer monsieur le juge.
Ton client tu vas lui demander comment faut traduire l'année 02 ? est-ce
2002 ou 1902 ? s'il te dit 2002, tu vas lui dire: monsieur , compte tenu que
vous ne voulez pas composer 2002, je suis obligé de faire le test et ça va
vous coûter tant. Il va falloir forcément faire un compromis entre la
qualité et la quantité. tu peux aussi passer toutes les dates en 2 chiffres
dans les paramètres régionaux et les options access, pourquoi pas ?


--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"JUGE Cédric" a écrit dans le message
de news:
pour le format 00/00/0000 effectivement ca marche mais mon client ne veut
pas
se taper les 4 digits de l'année (il a plusieurs saisie à faire à la
suite).
Effectivement, je peux mettre des tests en sortie de champ, mais je vais
partir sur un sacré délire, je vais être obligé de tester mois / mois et
il y
a toujours le pb de février et des années bissextiles !!!!
Je ne suis pas sorti des ronces.