OVH Cloud OVH Cloud

Donnees Date incompatibles

33 réponses
Avatar
dadpub
Bonjour,

Voulant trouver le prochain anniversaire parmi mes contacts, j'ai cette
requette :

SELECT TOP 1 TContact.Contact, TContact.DDN,
DateSerial(Year(Now()),Month([DDN]),Day([DDN])) AS Anniversaire
FROM TContact
WHERE ((DateSerial(Year(Now()),Month([DDN]),Day([DDN])))>Date()));

Sans le critere (where) ça marche, mais avec le critere j'ai ce message
d'erreur :
"Type de données incompatible dans l'expression du critère"
Or il s'agit bien de donnees de Type Date ! (DDN=Date De Naissance)
Ou est le bug ?

Merci.

10 réponses

1 2 3 4
Avatar
Jessy Sempere
Bonjour

La solution de ze_titi est bonne, par contre il faut basé le tri croissant
sur le champ calculé correspondant à l'anniversaire de l'année en cours,
sinon les résultat seront faux...

Voici donc le SQL qui doit fonctionner :

SELECT TOP 1 Contact, DDN
FROM TContact
WHERE (((DateSerial(Year(Date()),Month([DDN]),Day([DDN])))>Date()))
ORDER BY DateSerial(Year(Date()),Month([DDN]),Day([DDN]));

PS : J'ai testé et ça fonctionne très bien...
--
@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------




"Eric" a écrit dans le message de news:
%
Bonjour,

Je crois qu'il manquait juste à la proposition de ze Titi la clause de tri
croissant :
Order By DateSerial(Year(Date()),Month([DDN]),Day([DDN]))

non ?
Ben non ! pas mieux ...

Pour l'instant y'a que ça qui marche :

SELECT TOP 1 TContact.Contact, TContact.DDN
FROM TContact
WHERE (((Month([DDN]))>Month(Now()+7))) OR (((Month([DDN]))=Month(Now()))
AND ((Day([DDN]))>Day(Date())))
ORDER BY Month([DDN]), Day([DDN]);

Le seul problème est le chiffre après Now() + ...






Avatar
dadpub
"Jessy Sempere" a écrit dans le message de news:

Bonjour

La solution de ze_titi est bonne, par contre il faut basé le tri croissant
sur le champ calculé correspondant à l'anniversaire de l'année en cours,
sinon les résultat seront faux...

Voici donc le SQL qui doit fonctionner :

SELECT TOP 1 Contact, DDN
FROM TContact
WHERE (((DateSerial(Year(Date()),Month([DDN]),Day([DDN])))>Date()))
ORDER BY DateSerial(Year(Date()),Month([DDN]),Day([DDN]));

PS : J'ai testé et ça fonctionne très bien...


Ben moi ça donne ce message :
"Type de données incompatible dans l'expression du critère. (Erreur 3464)"
Désolé !

Avatar
dadpub
Bonsoir,

Bizarre !!!
Ton champ DDN est bien de type Date ? format abrégé par exemple ?
Aucun problème de ce coté là...de toute manière ma solution fonctionne et

elle a bien besoin de DDN comme type Date.

Je viens de tester sur 200 dates et j'ai pas de problème. 2 dates sortent
pour le 15/03 parmi les 200.
T'es sur que t'as pas bidouillé ton SQL ?

Redonne le pour voir ?
Merci.

Avatar
dadpub
Voici donc le SQL qui doit fonctionner :

SELECT TOP 1 Contact, DDN
FROM TContact
WHERE (((DateSerial(Year(Date()),Month([DDN]),Day([DDN])))>Date()))
ORDER BY DateSerial(Year(Date()),Month([DDN]),Day([DDN]));


Je précise que sans le ORDER BY ci-dessus, j'ai pas le message d'erreur type
incompatible, mais le résultat est pas bon ; ça renvoie pas le prochain
anniversaire.
En fait le tri se fait sur la clé et c'est faux

Avatar
Eric
re,

C'est la même proposition que celle de Jessy car je t'avais indiqué
qu'il fallait mettre
Order By DateSerial(Year(Date()),Month([DDN]),Day([DDN])) suite à la
proposition de ze Titi

Voila c'est un exemple sur des dates de facture mais le traitement est
le même que des date de naissance.

SELECT TOP 1 NumFacture, DateFacture,
DateSerial(Year(Date()),Month([datefacture]),Day([datefacture]))
FROM tFacture
WHERE
DateSerial(Year(Date()),Month([datefacture]),Day([datefacture]))>Date()
ORDER BY DateSerial(Year(Date()),Month([datefacture]),Day([datefacture]));

Si tu as toujours l'incompatibilité de type, peux tu mettre une bd avec
quelques enregistrements au format Access2k sur www.cjoint.com et poster
le lien fourni?

*

Bonsoir,

Bizarre !!!
Ton champ DDN est bien de type Date ? format abrégé par exemple ?
Aucun problème de ce coté là...de toute manière ma solution fonctionne et

elle a bien besoin de DDN comme type Date.

Je viens de tester sur 200 dates et j'ai pas de problème. 2 dates sortent
pour le 15/03 parmi les 200.
T'es sur que t'as pas bidouillé ton SQL ?



* Non, pourquoi je ferai une telle chose ???

--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr


Avatar
Jessy Sempere
Bonjour

Question bête...

TContact est bien une table ???
Ce ne srait pas une requête ? Voir une requête avec regroupement ??

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"dadpub" a écrit dans le message de news:


Voici donc le SQL qui doit fonctionner :

SELECT TOP 1 Contact, DDN
FROM TContact
WHERE (((DateSerial(Year(Date()),Month([DDN]),Day([DDN])))>Date()))
ORDER BY DateSerial(Year(Date()),Month([DDN]),Day([DDN]));


Je précise que sans le ORDER BY ci-dessus, j'ai pas le message d'erreur
type incompatible, mais le résultat est pas bon ; ça renvoie pas le
prochain anniversaire.
En fait le tri se fait sur la clé et c'est faux





Avatar
dadpub
Bonjour,

Question bête...

TContact est bien une table ???
Ce ne srait pas une requête ? Voir une requête avec regroupement ??


C'est bien une table ...
@ +

Avatar
Pierre CFI [mvp]
bonjour
oui, mais j'ai fais l'essais hier, j'avais le méme message et pas ce matin
cause, 1 des champs date était Null

--
Pierre
MVP Access
***************************************
Conseils MPFA: http://www.mpfa.info/
*********************************************************
"Jessy Sempere" a écrit dans le message de news:

Bonjour

Question bête...

TContact est bien une table ???
Ce ne srait pas une requête ? Voir une requête avec regroupement ??

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"dadpub" a écrit dans le message de news:


Voici donc le SQL qui doit fonctionner :

SELECT TOP 1 Contact, DDN
FROM TContact
WHERE (((DateSerial(Year(Date()),Month([DDN]),Day([DDN])))>Date()))
ORDER BY DateSerial(Year(Date()),Month([DDN]),Day([DDN]));


Je précise que sans le ORDER BY ci-dessus, j'ai pas le message d'erreur
type incompatible, mais le résultat est pas bon ; ça renvoie pas le
prochain anniversaire.
En fait le tri se fait sur la clé et c'est faux









Avatar
dadpub
Bonjour,

Voila c'est un exemple sur des dates de facture mais le traitement est le
même que des date de naissance.

SELECT TOP 1 NumFacture, DateFacture,
DateSerial(Year(Date()),Month([datefacture]),Day([datefacture]))
FROM tFacture
WHERE
DateSerial(Year(Date()),Month([datefacture]),Day([datefacture]))>Date()
ORDER BY DateSerial(Year(Date()),Month([datefacture]),Day([datefacture]));


J'ai testé ça, ça bug avec le ORDER BY et le résultat est faux sans le ORDER
BY.

Si tu as toujours l'incompatibilité de type, peux tu mettre une bd avec
quelques enregistrements au format Access2k sur www.cjoint.com et poster
le lien fourni?


Je fais ça Lundi si la solution n'est pas trouvée ...
Merci.

Avatar
Jessy Sempere
Salut Pierre

Effectivement, je n'y avais pas pensé à ce truc de la valeur nulle...

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------



bonjour
oui, mais j'ai fais l'essais hier, j'avais le méme message et pas ce matin
cause, 1 des champs date était Null

--
Pierre
MVP Access
***************************************
Conseils MPFA: http://www.mpfa.info/
*********************************************************
"Jessy Sempere" a écrit dans le message de news:

Bonjour

Question bête...

TContact est bien une table ???
Ce ne srait pas une requête ? Voir une requête avec regroupement ??

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"dadpub" a écrit dans le message de news:


Voici donc le SQL qui doit fonctionner :

SELECT TOP 1 Contact, DDN
FROM TContact
WHERE (((DateSerial(Year(Date()),Month([DDN]),Day([DDN])))>Date()))
ORDER BY DateSerial(Year(Date()),Month([DDN]),Day([DDN]));


Je précise que sans le ORDER BY ci-dessus, j'ai pas le message d'erreur
type incompatible, mais le résultat est pas bon ; ça renvoie pas le
prochain anniversaire.
En fait le tri se fait sur la clé et c'est faux














1 2 3 4