OVH Cloud OVH Cloud

Aie Aie aie les dates !!!!

7 réponses
Avatar
JFGerard
Bonjour
Bien que le probleme ait ete percu dans SQL CE (la version pour les pda)
fourni avec la version Express de VS2005, je me suis permis de poster ici.
merci de m'accueillir !!
Le probleme
Dans le generateur de Query, j'ai ecrit un truc du genre :
INSERT INTO Parametres (DateCreation) VALUES ('012/012/01 12:11:50')
Ca marche
Mais si j'ecris
INSERT INTO Parametres (DateCreation) VALUES ('013/012/01 12:11:50')
ca marche plus !!!!
Pourquoi sur un PC totalement localise "Francais de France" avec dateXP au
format dd/mm/yy (ou jj/mm/aa plutot), les dates dont le jour du mois
depassent 12 (le nombre de mois objectivement possibles pour une date sympa)
plantent la requete d'insertion d'enregistrement ( ca plante aussi une
requete Maj, on s'en douterait).
J'avoue que je suis un peu surpris, ou alors quel parametre de SQL CE (et où
?) dois-je corriger ?

Merci a tous
JF

7 réponses

Avatar
Med Bouchenafa
Idealement, tu ne derais utiliser que le format ANSI (AAAMMJJ sans
separateur) qui marche à tous les coups
INSERT INTO Parametres (DateCreation) VALUES ('20011213 12:11:50')

--
Bien cordialement
Med Bouchenafa

"JFGerard" wrote in message
news:
Bonjour
Bien que le probleme ait ete percu dans SQL CE (la version pour les pda)
fourni avec la version Express de VS2005, je me suis permis de poster ici.
merci de m'accueillir !!
Le probleme
Dans le generateur de Query, j'ai ecrit un truc du genre :
INSERT INTO Parametres (DateCreation) VALUES ('012/012/01 12:11:50')
Ca marche
Mais si j'ecris
INSERT INTO Parametres (DateCreation) VALUES ('013/012/01 12:11:50')
ca marche plus !!!!
Pourquoi sur un PC totalement localise "Francais de France" avec dateXP au
format dd/mm/yy (ou jj/mm/aa plutot), les dates dont le jour du mois
depassent 12 (le nombre de mois objectivement possibles pour une date
sympa)
plantent la requete d'insertion d'enregistrement ( ca plante aussi une
requete Maj, on s'en douterait).
J'avoue que je suis un peu surpris, ou alors quel parametre de SQL CE (et

?) dois-je corriger ?

Merci a tous
JF


Avatar
Patrice
Un grand classique. Il faut bien prendre conscience que la réprésentation
texte des dates (mais aussi par exemple des nombres décimaux) est une
convention qui dépend du pays :
- bien prendre soin d'utiliser une convention "universelle" (la date ISO
comme suggérée par Med) qui fonctionnera quel que soit le régagle de SQL
Server
- dans une appli, il est également possible d'utiliser des requêtes
paramétrées ce qui évite d'avoir à incorporer explicitement les données
(éventuellement de façon erronée) dans le texte de l'instruction SQL

--

"JFGerard" a écrit dans le message de
news:
Bonjour
Bien que le probleme ait ete percu dans SQL CE (la version pour les pda)
fourni avec la version Express de VS2005, je me suis permis de poster ici.
merci de m'accueillir !!
Le probleme
Dans le generateur de Query, j'ai ecrit un truc du genre :
INSERT INTO Parametres (DateCreation) VALUES ('012/012/01 12:11:50')
Ca marche
Mais si j'ecris
INSERT INTO Parametres (DateCreation) VALUES ('013/012/01 12:11:50')
ca marche plus !!!!
Pourquoi sur un PC totalement localise "Francais de France" avec dateXP au
format dd/mm/yy (ou jj/mm/aa plutot), les dates dont le jour du mois
depassent 12 (le nombre de mois objectivement possibles pour une date
sympa)
plantent la requete d'insertion d'enregistrement ( ca plante aussi une
requete Maj, on s'en douterait).
J'avoue que je suis un peu surpris, ou alors quel parametre de SQL CE (et

?) dois-je corriger ?

Merci a tous
JF


Avatar
JFGerard
J'ai fait une reponse a Patrice en m'inspirant de vos remarques communes
mais si tu pouvais poursuivre aussi .....
JF

Merci

"Med Bouchenafa" a écrit :

Idealement, tu ne derais utiliser que le format ANSI (AAAMMJJ sans
separateur) qui marche à tous les coups
INSERT INTO Parametres (DateCreation) VALUES ('20011213 12:11:50')

--
Bien cordialement
Med Bouchenafa

"JFGerard" wrote in message
news:
> Bonjour
> Bien que le probleme ait ete percu dans SQL CE (la version pour les pda)
> fourni avec la version Express de VS2005, je me suis permis de poster ici.
> merci de m'accueillir !!
> Le probleme
> Dans le generateur de Query, j'ai ecrit un truc du genre :
> INSERT INTO Parametres (DateCreation) VALUES ('012/012/01 12:11:50')
> Ca marche
> Mais si j'ecris
> INSERT INTO Parametres (DateCreation) VALUES ('013/012/01 12:11:50')
> ca marche plus !!!!
> Pourquoi sur un PC totalement localise "Francais de France" avec dateXP au
> format dd/mm/yy (ou jj/mm/aa plutot), les dates dont le jour du mois
> depassent 12 (le nombre de mois objectivement possibles pour une date
> sympa)
> plantent la requete d'insertion d'enregistrement ( ca plante aussi une
> requete Maj, on s'en douterait).
> J'avoue que je suis un peu surpris, ou alors quel parametre de SQL CE (et
> où
> ?) dois-je corriger ?
>
> Merci a tous
> JF





Avatar
JFGerard
Argh ....

je comprends, mais pour l'instant j'en suis encore a tester l'ecriture de
requete SQL directement dans le "Server Explorer" de l'outil de developpement
VS2005 .Net et quand je mets une date dans la requete construite
automatiquement par l'outil de generation des Query, il n'y a pas beaucoup de
choix sur la selection des formats.
La requete est generée et executée ..... et se plante si -par malheur- le
jour depasse 12 .... et je ne sais pas comment lui dire d'accepter un format
ISO ...

et , si je peux me permettre, j'ai d'abord essayé un truc du genre
INSERT INTO Parametres (DateCreation) VALUES (todate('20061113'))
qui m'a dit
"Cannot convert to valid date/time ; TO_DATE function might be required"
au moment de la compilation de la requete ?
donc j'ai remplacé par
INSERT INTO Parametres (DateCreation) VALUES (to_date('20061113'))
qui m'a jeté parce que la fonction to_date n'est pas accepté par SQL SERVER
Mobile Edition (ne pas oublier que je teste un truc pour fonctionner sur Pda
mais qui s'appelle quand meme SQL !!)
d'ou une grande perplexité ......

donc :
merci parce que je vais stocker la donnee au format ISO et ma primitive
d'acces au donnees (quand j'ajouterai du code) me la remettra a un joli
format date (en entree et en sortie)
Mais _ SVP _
je voudrais quand meme bien comprendre ..... si vous avez encore quelques
instants a consacrer a ce petit probleme ...

JF

PS : Par contre, je crains d'avoir d'autres soucis lorsque j'accederai a la
source de donnees (qui sera alors de type string) via un DataSet,
DataAdapter, BindingSource construits automatiquement, et un controle type
ControlBox ou ListBox qui ne me presentera jamais cela comme une date ?
Mais on verra cela un autre jour ...



"Patrice" a écrit :

Un grand classique. Il faut bien prendre conscience que la réprésentation
texte des dates (mais aussi par exemple des nombres décimaux) est une
convention qui dépend du pays :
- bien prendre soin d'utiliser une convention "universelle" (la date ISO
comme suggérée par Med) qui fonctionnera quel que soit le régagle de SQL
Server
- dans une appli, il est également possible d'utiliser des requêtes
paramétrées ce qui évite d'avoir à incorporer explicitement les données
(éventuellement de façon erronée) dans le texte de l'instruction SQL

--

"JFGerard" a écrit dans le message de
news:
> Bonjour
> Bien que le probleme ait ete percu dans SQL CE (la version pour les pda)
> fourni avec la version Express de VS2005, je me suis permis de poster ici.
> merci de m'accueillir !!
> Le probleme
> Dans le generateur de Query, j'ai ecrit un truc du genre :
> INSERT INTO Parametres (DateCreation) VALUES ('012/012/01 12:11:50')
> Ca marche
> Mais si j'ecris
> INSERT INTO Parametres (DateCreation) VALUES ('013/012/01 12:11:50')
> ca marche plus !!!!
> Pourquoi sur un PC totalement localise "Francais de France" avec dateXP au
> format dd/mm/yy (ou jj/mm/aa plutot), les dates dont le jour du mois
> depassent 12 (le nombre de mois objectivement possibles pour une date
> sympa)
> plantent la requete d'insertion d'enregistrement ( ca plante aussi une
> requete Maj, on s'en douterait).
> J'avoue que je suis un peu surpris, ou alors quel parametre de SQL CE (et
> où
> ?) dois-je corriger ?
>
> Merci a tous
> JF





Avatar
Patrice
Cela donnera donc :

INSERT INTO Parametres(DateCreation) VALUES ('20061113') -- 13 novembre

Le date est exprimée sous forme d'une chaine au format ISO qui sera toujours
correctement interprétée (alors qu'une chaine comme '01/02/2006' pourrait
être convertie en 1er février ou le 2 janvier selon la config de SQL
Server).

ATTENTION : on n'a pas parlé de stockage. Même avec l'instruction ci-dessus,
le texte est converti sans ambiguïté en date et SQL Server stockera la date
toujours sous le même format interne (donc la date sera retrouvée exactement
de la même façon dans un dataset). Ce n'est pas un problème de stockage, le
problème est qu'une date est exprimée de façon ambigue sous forme de texte,
le point délicat est donc la conversion du texte dans le format interne de
stockage de date correspondant...

--

"JFGerard" a écrit dans le message de
news:
Argh ....

je comprends, mais pour l'instant j'en suis encore a tester l'ecriture de
requete SQL directement dans le "Server Explorer" de l'outil de
developpement
VS2005 .Net et quand je mets une date dans la requete construite
automatiquement par l'outil de generation des Query, il n'y a pas beaucoup
de
choix sur la selection des formats.
La requete est generée et executée ..... et se plante si -par malheur- le
jour depasse 12 .... et je ne sais pas comment lui dire d'accepter un
format
ISO ...

et , si je peux me permettre, j'ai d'abord essayé un truc du genre
INSERT INTO Parametres (DateCreation) VALUES (todate('20061113'))
qui m'a dit
"Cannot convert to valid date/time ; TO_DATE function might be required"
au moment de la compilation de la requete ?
donc j'ai remplacé par
INSERT INTO Parametres (DateCreation) VALUES (to_date('20061113'))
qui m'a jeté parce que la fonction to_date n'est pas accepté par SQL
SERVER
Mobile Edition (ne pas oublier que je teste un truc pour fonctionner sur
Pda
mais qui s'appelle quand meme SQL !!)
d'ou une grande perplexité ......

donc :
merci parce que je vais stocker la donnee au format ISO et ma primitive
d'acces au donnees (quand j'ajouterai du code) me la remettra a un joli
format date (en entree et en sortie)
Mais _ SVP _
je voudrais quand meme bien comprendre ..... si vous avez encore quelques
instants a consacrer a ce petit probleme ...

JF

PS : Par contre, je crains d'avoir d'autres soucis lorsque j'accederai a
la
source de donnees (qui sera alors de type string) via un DataSet,
DataAdapter, BindingSource construits automatiquement, et un controle type
ControlBox ou ListBox qui ne me presentera jamais cela comme une date ?
Mais on verra cela un autre jour ...



"Patrice" a écrit :

Un grand classique. Il faut bien prendre conscience que la réprésentation
texte des dates (mais aussi par exemple des nombres décimaux) est une
convention qui dépend du pays :
- bien prendre soin d'utiliser une convention "universelle" (la date ISO
comme suggérée par Med) qui fonctionnera quel que soit le régagle de SQL
Server
- dans une appli, il est également possible d'utiliser des requêtes
paramétrées ce qui évite d'avoir à incorporer explicitement les données
(éventuellement de façon erronée) dans le texte de l'instruction SQL

--

"JFGerard" a écrit dans le message
de
news:
> Bonjour
> Bien que le probleme ait ete percu dans SQL CE (la version pour les
> pda)
> fourni avec la version Express de VS2005, je me suis permis de poster
> ici.
> merci de m'accueillir !!
> Le probleme
> Dans le generateur de Query, j'ai ecrit un truc du genre :
> INSERT INTO Parametres (DateCreation) VALUES ('012/012/01 12:11:50')
> Ca marche
> Mais si j'ecris
> INSERT INTO Parametres (DateCreation) VALUES ('013/012/01 12:11:50')
> ca marche plus !!!!
> Pourquoi sur un PC totalement localise "Francais de France" avec dateXP
> au
> format dd/mm/yy (ou jj/mm/aa plutot), les dates dont le jour du mois
> depassent 12 (le nombre de mois objectivement possibles pour une date
> sympa)
> plantent la requete d'insertion d'enregistrement ( ca plante aussi une
> requete Maj, on s'en douterait).
> J'avoue que je suis un peu surpris, ou alors quel parametre de SQL CE
> (et
> où
> ?) dois-je corriger ?
>
> Merci a tous
> JF







Avatar
SQLpro
to_date n'existe pas en SQL. C'est spécifique à Oracle. SQL Server
respecte la norme SQL et utilise la fonction normative CAST :

INSERT INTO Parametres (DateCreation) VALUES (CAST('20061113' AS
DATETIME))

Si vous voulez utiliser un format exotique il faut ajouter à votre
session le flag DATEFORMAT.

Exemples :

SET DATEFORMAT ymd
SELECT CAST('2006/11/13' AS DATETIME)

SET DATEFORMAT ydm
SELECT CAST('2006/13/11' AS DATETIME)

SET DATEFORMAT mdy
SELECT CAST(11-13-2006' AS DATETIME)

SET DATEFORMAT myd
SELECT CAST(11-2006/13' AS DATETIME)

A +

JFGerard a écrit :

Argh ....

je comprends, mais pour l'instant j'en suis encore a tester l'ecriture de
requete SQL directement dans le "Server Explorer" de l'outil de developpe ment
VS2005 .Net et quand je mets une date dans la requete construite
automatiquement par l'outil de generation des Query, il n'y a pas beaucou p de
choix sur la selection des formats.
La requete est generée et executée ..... et se plante si -par malheur - le
jour depasse 12 .... et je ne sais pas comment lui dire d'accepter un for mat
ISO ...

et , si je peux me permettre, j'ai d'abord essayé un truc du genre
INSERT INTO Parametres (DateCreation) VALUES (todate('20061113'))
qui m'a dit
"Cannot convert to valid date/time ; TO_DATE function might be required"
au moment de la compilation de la requete ?
donc j'ai remplacé par
INSERT INTO Parametres (DateCreation) VALUES (to_date('20061113'))
qui m'a jeté parce que la fonction to_date n'est pas accepté par SQL SERVER
Mobile Edition (ne pas oublier que je teste un truc pour fonctionner sur Pda
mais qui s'appelle quand meme SQL !!)
d'ou une grande perplexité ......

donc :
merci parce que je vais stocker la donnee au format ISO et ma primitive
d'acces au donnees (quand j'ajouterai du code) me la remettra a un joli
format date (en entree et en sortie)
Mais _ SVP _
je voudrais quand meme bien comprendre ..... si vous avez encore quelques
instants a consacrer a ce petit probleme ...

JF

PS : Par contre, je crains d'avoir d'autres soucis lorsque j'accederai a la
source de donnees (qui sera alors de type string) via un DataSet,
DataAdapter, BindingSource construits automatiquement, et un controle type
ControlBox ou ListBox qui ne me presentera jamais cela comme une date ?
Mais on verra cela un autre jour ...



"Patrice" a écrit :

> Un grand classique. Il faut bien prendre conscience que la réprésen tation
> texte des dates (mais aussi par exemple des nombres décimaux) est une
> convention qui dépend du pays :
> - bien prendre soin d'utiliser une convention "universelle" (la date ISO
> comme suggérée par Med) qui fonctionnera quel que soit le régagle de SQL
> Server
> - dans une appli, il est également possible d'utiliser des requêtes
> paramétrées ce qui évite d'avoir à incorporer explicitement les données
> (éventuellement de façon erronée) dans le texte de l'instruction SQL
>
> --
>
> "JFGerard" a écrit dans le messa ge de
> news:
> > Bonjour
> > Bien que le probleme ait ete percu dans SQL CE (la version pour les p da)
> > fourni avec la version Express de VS2005, je me suis permis de poster ici.
> > merci de m'accueillir !!
> > Le probleme
> > Dans le generateur de Query, j'ai ecrit un truc du genre :
> > INSERT INTO Parametres (DateCreation) VALUES ('012/012/01 12:11:50')
> > Ca marche
> > Mais si j'ecris
> > INSERT INTO Parametres (DateCreation) VALUES ('013/012/01 12:11:50')
> > ca marche plus !!!!
> > Pourquoi sur un PC totalement localise "Francais de France" avec date XP au
> > format dd/mm/yy (ou jj/mm/aa plutot), les dates dont le jour du mois
> > depassent 12 (le nombre de mois objectivement possibles pour une date
> > sympa)
> > plantent la requete d'insertion d'enregistrement ( ca plante aussi une
> > requete Maj, on s'en douterait).
> > J'avoue que je suis un peu surpris, ou alors quel parametre de SQL CE (et
> > où
> > ?) dois-je corriger ?
> >
> > Merci a tous
> > JF
>
>
>


Avatar
JFGerard
Bonjour

Avant toute chose, je remercie les aimables participants d'avoir consacré
quelques minutes a me repondre, en toute amitié, et avec l'humilité du
debutant.

Par contre, je souhaite quand meme poser la question de savoir si les
solutions avancees sont testées DANS L'ENVIRONNEMENT DECRIT, avant d'etre
proposées ?

En effet, les approches de Med et SqlPro sont bonnes, il faut envoyer le
format 'AAAAMMJJ' mais SQL Mobile Edition ne sait pas ce que c'est que cast
, aussi bien dans l'environnement de dev VS.Net qu'en direct sur le Pda.

Et il faut dire aussi que
1) l'assistant graphique de construction des requetes est loin de presenter
la meilleure solution, et
2) les messages d'erreur renvoyés dans l'environnement de Dev meriteraient
un peu plus de precision. Ce sont quand meme ces messages qui m'ont envoyés
sur la piste du 'To_Date' !!!
Passons.

Tout ce que le Pda accepte c'est Insert .... Values ('AAAAMMJJ') avec des
dates sans ambiguité, ou ... Values ('MM/JJ/AAAA') avec des dates a
l'anglaise.
Mais, ne pas esperer, quelquesoit la localisation du Pda, esperer lui faire
accepter une date à la francaise : la doc pourrait le dire !!!

Donc maintenant, tout va bien, ou presque parce que il va falloir adapter
les primitives qui causent avec les tables, mais c'est du VB et donc ca
devrait y faire !!!
et j'espere que le XmlWriter ne posera pas plus de soucis !!!!

Cordialement
Grand merci
JF


"SQLpro" a écrit :

to_date n'existe pas en SQL. C'est spécifique à Oracle. SQL Server
respecte la norme SQL et utilise la fonction normative CAST :

INSERT INTO Parametres (DateCreation) VALUES (CAST('20061113' AS
DATETIME))

Si vous voulez utiliser un format exotique il faut ajouter à votre
session le flag DATEFORMAT.

Exemples :

SET DATEFORMAT ymd
SELECT CAST('2006/11/13' AS DATETIME)

SET DATEFORMAT ydm
SELECT CAST('2006/13/11' AS DATETIME)

SET DATEFORMAT mdy
SELECT CAST(11-13-2006' AS DATETIME)

SET DATEFORMAT myd
SELECT CAST(11-2006/13' AS DATETIME)

A +

JFGerard a écrit :

> Argh ....
>
> je comprends, mais pour l'instant j'en suis encore a tester l'ecriture de
> requete SQL directement dans le "Server Explorer" de l'outil de developpement
> VS2005 .Net et quand je mets une date dans la requete construite
> automatiquement par l'outil de generation des Query, il n'y a pas beaucoup de
> choix sur la selection des formats.
> La requete est generée et executée ..... et se plante si -par malheur- le
> jour depasse 12 .... et je ne sais pas comment lui dire d'accepter un format
> ISO ...
>
> et , si je peux me permettre, j'ai d'abord essayé un truc du genre
> INSERT INTO Parametres (DateCreation) VALUES (todate('20061113'))
> qui m'a dit
> "Cannot convert to valid date/time ; TO_DATE function might be required"
> au moment de la compilation de la requete ?
> donc j'ai remplacé par
> INSERT INTO Parametres (DateCreation) VALUES (to_date('20061113'))
> qui m'a jeté parce que la fonction to_date n'est pas accepté par SQL SERVER
> Mobile Edition (ne pas oublier que je teste un truc pour fonctionner sur Pda
> mais qui s'appelle quand meme SQL !!)
> d'ou une grande perplexité ......
>
> donc :
> merci parce que je vais stocker la donnee au format ISO et ma primitive
> d'acces au donnees (quand j'ajouterai du code) me la remettra a un joli
> format date (en entree et en sortie)
> Mais _ SVP _
> je voudrais quand meme bien comprendre ..... si vous avez encore quelques
> instants a consacrer a ce petit probleme ...
>
> JF
>
> PS : Par contre, je crains d'avoir d'autres soucis lorsque j'accederai a la
> source de donnees (qui sera alors de type string) via un DataSet,
> DataAdapter, BindingSource construits automatiquement, et un controle type
> ControlBox ou ListBox qui ne me presentera jamais cela comme une date ?
> Mais on verra cela un autre jour ...
>
>
>
> "Patrice" a écrit :
>
> > Un grand classique. Il faut bien prendre conscience que la réprésentation
> > texte des dates (mais aussi par exemple des nombres décimaux) est une
> > convention qui dépend du pays :
> > - bien prendre soin d'utiliser une convention "universelle" (la date ISO
> > comme suggérée par Med) qui fonctionnera quel que soit le régagle de SQL
> > Server
> > - dans une appli, il est également possible d'utiliser des requêtes
> > paramétrées ce qui évite d'avoir à incorporer explicitement les données
> > (éventuellement de façon erronée) dans le texte de l'instruction SQL
> >
> > --
> >
> > "JFGerard" a écrit dans le message de
> > news:
> > > Bonjour
> > > Bien que le probleme ait ete percu dans SQL CE (la version pour les pda)
> > > fourni avec la version Express de VS2005, je me suis permis de poster ici.
> > > merci de m'accueillir !!
> > > Le probleme
> > > Dans le generateur de Query, j'ai ecrit un truc du genre :
> > > INSERT INTO Parametres (DateCreation) VALUES ('012/012/01 12:11:50')
> > > Ca marche
> > > Mais si j'ecris
> > > INSERT INTO Parametres (DateCreation) VALUES ('013/012/01 12:11:50')
> > > ca marche plus !!!!
> > > Pourquoi sur un PC totalement localise "Francais de France" avec dateXP au
> > > format dd/mm/yy (ou jj/mm/aa plutot), les dates dont le jour du mois
> > > depassent 12 (le nombre de mois objectivement possibles pour une date
> > > sympa)
> > > plantent la requete d'insertion d'enregistrement ( ca plante aussi une
> > > requete Maj, on s'en douterait).
> > > J'avoue que je suis un peu surpris, ou alors quel parametre de SQL CE (et
> > > où
> > > ?) dois-je corriger ?
> > >
> > > Merci a tous
> > > JF
> >
> >
> >