OVH Cloud OVH Cloud

Format de date bizarre

9 réponses
Avatar
Denis P
Bonjour tout le monde,

Je rencontre actuellement un phénomène plutôt bizarre lorsque j'enregistre
une date dans une table Access à l'aide d'ADO. Je m'explique. Je tente
d'ajouter une ligne dans une table à l'aide d'une requête Insert, tout se
passe bien, seulement dans cette table j'ai un champ date et celui-ci ne
m'enregistre pas la date courante comme il devrait.

Par exemple ma requête ressemble à ceci

"INSERT INTO TABLE1 (Champ1, Champ2) Values (10, " & Date & ")"

J'ai également essayer de formater ma date en faisant Format$(Date,
"YYYY/MM/DD") mais rien d'y change. Lorsque je vais voir dans Access, ma
date ressemble plutôt à 1889-10-25 alors qu'elle aura dû être 2003-12-03.

Par contre si je change de méthode et que je fais

"SELECT * FROM TABLE1"

que j'utilise un recordset pour mettre ma table à jour de cette façon

rs.AddNew
rs!Champ1 = 10
rs!Champ2 = Date
rs.Update

Alors à ce moment quand je vais voir dans Access, ma date est bien
enregistré dans le bon format 2003-12-03.

Pourquoi ce phénomène se produit-il ? Pourtant Date retourne toujours la
même chose soit la date actuel dans un format selon les paramètres
régionaux.

Comme de raison, je peux m'accommoder de la dernière solution, mais je
préfèrerais grandement utiliser une requête Insert plutôt qu'un Select et
d'un AddNew. Y a-t-il donc un moyen d'effectuer mes enregistrements avec
Insert en ayant ma date dans le bon format?

Si quelqu'un connaît la solution à ce problème, merci de m'en faire part.

Denis P

9 réponses

Avatar
+The_Taco+
Ok, as-tu essayer d'entrer ta date de cette façon? :

INSERT INTO TABLE1 (Champ1, Champ2) VALUES (10, '" & str(date) & "')"

Soit mettre ta date entre appostrophe, la passer comme une string...

"Denis P" a écrit dans le message de
news:
Bonjour tout le monde,

Je rencontre actuellement un phénomène plutôt bizarre lorsque j'enregistre
une date dans une table Access à l'aide d'ADO. Je m'explique. Je tente
d'ajouter une ligne dans une table à l'aide d'une requête Insert, tout se
passe bien, seulement dans cette table j'ai un champ date et celui-ci ne
m'enregistre pas la date courante comme il devrait.

Par exemple ma requête ressemble à ceci

"INSERT INTO TABLE1 (Champ1, Champ2) Values (10, " & Date & ")"

J'ai également essayer de formater ma date en faisant Format$(Date,
"YYYY/MM/DD") mais rien d'y change. Lorsque je vais voir dans Access, ma
date ressemble plutôt à 1889-10-25 alors qu'elle aura dû être 2003-12-03.

Par contre si je change de méthode et que je fais

"SELECT * FROM TABLE1"

que j'utilise un recordset pour mettre ma table à jour de cette façon

rs.AddNew
rs!Champ1 = 10
rs!Champ2 = Date
rs.Update

Alors à ce moment quand je vais voir dans Access, ma date est bien
enregistré dans le bon format 2003-12-03.

Pourquoi ce phénomène se produit-il ? Pourtant Date retourne toujours la
même chose soit la date actuel dans un format selon les paramètres
régionaux.

Comme de raison, je peux m'accommoder de la dernière solution, mais je
préfèrerais grandement utiliser une requête Insert plutôt qu'un Select et
d'un AddNew. Y a-t-il donc un moyen d'effectuer mes enregistrements avec
Insert en ayant ma date dans le bon format?

Si quelqu'un connaît la solution à ce problème, merci de m'en faire part.

Denis P




Avatar
Zoury
Salut Dominic, salut Denis! :O)


si le champs est de type date ça passera peut-être pas... (sous SQL Server
du moins ça ne passe pas..).. il faudra la re"caster" du côté SQL..

quelque chose comme :
'***
sQuery = "insert into table1(champ1, champ2) values('test', cast('" &
Now & "' as datetime))"
'***



un autre bon truc éviter les problèmes de format de date, c'est de passer la
valeur en nombre de jour.

si tu converti une date en Single ou en Double, la partie entière te renvoi
le nombre de jour depuis 30 Décembre 1899 et a la partie décimal contient
l'heure (0 pour minuit, 0,5 pour midi..). Tu pourrais donc reconvertir cette
valeur du côté SQL..

quelque chose comme :
'***
sQuery = "insert into table1(champ1, champ2) values('test', cast(" &
CDbl(Now) & " as datetime))"
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
+The_Taco+
Merci de l'info mec!
"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut Dominic, salut Denis! :O)


si le champs est de type date ça passera peut-être pas... (sous SQL Server
du moins ça ne passe pas..).. il faudra la re"caster" du côté SQL..

quelque chose comme :
'***
sQuery = "insert into table1(champ1, champ2) values('test', cast('" &
Now & "' as datetime))"
'***



un autre bon truc éviter les problèmes de format de date, c'est de passer


la
valeur en nombre de jour.

si tu converti une date en Single ou en Double, la partie entière te


renvoi
le nombre de jour depuis 30 Décembre 1899 et a la partie décimal contient
l'heure (0 pour minuit, 0,5 pour midi..). Tu pourrais donc reconvertir


cette
valeur du côté SQL..

quelque chose comme :
'***
sQuery = "insert into table1(champ1, champ2) values('test', cast(" &
CDbl(Now) & " as datetime))"
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous




Avatar
Denis P
Merci Yanick pour le truc, je vais m'en souvenir pour SQL Server, mais le
problème c'est que là je travaille avec une base Access et malheureusement à
moins que je me trompe Cast ne fonctionne pas sous Access. Mais je comprend
toujours pas plus pourquoi Date s'inscrit de façon différente selon qu'il
soit dans un Insert ou un Update.

J'ai bien l'impression que je vais devoir me contenter de mon recordset avec
un Update si je veux avoir le bon format de date. Ce que je déplore le plus
dans cette façon de fonctionner, c'est que cette façon tôt ou tard ralentira
le programme et augmentera considérablement le trafic sur le réseau. Avec
un Insert le programme envoie seulement les données vers Access, alors
qu'avec un Update je dois d'abord récupérer la table pour ensuite lui passer
le Update. Donc plus la table augmentera en volume et plus de données
devront passées de Access au programme, et cela absolument pour rien, sauf
pour y retourner un enregistrement.

Il me vient donc une question à l'esprit. Actuellement pour effectuer mon
Update à partir de mon recordset, je sélectionne la table en entier. Alors
pour éviter un transfert de données inutiliment, sera-t-il possible
d'effectuer une requête qui me ramènrait seulement le dernier enregistrement
de ma table et de pouvoir y effectuer un Update quand même.

Comme de raison, je vais tester cette solution, mais si quelqu'un arrive à
me trouver la solution pour que je puisse utiliser une requête Insert, j'en
serais ravi.

Merci encore de vos suggestions en espérant que quelqu'un pourra m'expliquer
cet étrange phénomène de format de date.

Denis P

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut Dominic, salut Denis! :O)


si le champs est de type date ça passera peut-être pas... (sous SQL Server
du moins ça ne passe pas..).. il faudra la re"caster" du côté SQL..

quelque chose comme :
'***
sQuery = "insert into table1(champ1, champ2) values('test', cast('" &
Now & "' as datetime))"
'***



un autre bon truc éviter les problèmes de format de date, c'est de passer


la
valeur en nombre de jour.

si tu converti une date en Single ou en Double, la partie entière te


renvoi
le nombre de jour depuis 30 Décembre 1899 et a la partie décimal contient
l'heure (0 pour minuit, 0,5 pour midi..). Tu pourrais donc reconvertir


cette
valeur du côté SQL..

quelque chose comme :
'***
sQuery = "insert into table1(champ1, champ2) values('test', cast(" &
CDbl(Now) & " as datetime))"
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous




Avatar
Denis P
D'accord je viens de trouver la solution.

Une erreur stupide à laquelle j'aurais dû penser avant.

je faisais

"INSERT INTO TABLE1 (Champ1, Champ2) Values (10, " & Date & ")"
et bien il fallait simplement que je fasse plutôt

"INSERT INTO TABLE1 (Champ1, Champ2) Values (10, #" & Date & "#)"

les chers dièses (#) que l'on doit mettre avant une date

Merci tout de même de vous être pencher sur mon problème.

@ +

Denis P

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut Dominic, salut Denis! :O)


si le champs est de type date ça passera peut-être pas... (sous SQL Server
du moins ça ne passe pas..).. il faudra la re"caster" du côté SQL..

quelque chose comme :
'***
sQuery = "insert into table1(champ1, champ2) values('test', cast('" &
Now & "' as datetime))"
'***



un autre bon truc éviter les problèmes de format de date, c'est de passer


la
valeur en nombre de jour.

si tu converti une date en Single ou en Double, la partie entière te


renvoi
le nombre de jour depuis 30 Décembre 1899 et a la partie décimal contient
l'heure (0 pour minuit, 0,5 pour midi..). Tu pourrais donc reconvertir


cette
valeur du côté SQL..

quelque chose comme :
'***
sQuery = "insert into table1(champ1, champ2) values('test', cast(" &
CDbl(Now) & " as datetime))"
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous




Avatar
+The_Taco+
Ah oui? je ne savais pas qu'il fallait des # pour la date en access... Je
croyais que c'était pareil comme SQL Server, soit les ' de chauqe côté de la
date..

J'en prend note!

"Denis P" a écrit dans le message de
news:
D'accord je viens de trouver la solution.

Une erreur stupide à laquelle j'aurais dû penser avant.

je faisais

"INSERT INTO TABLE1 (Champ1, Champ2) Values (10, " & Date & ")"
et bien il fallait simplement que je fasse plutôt

"INSERT INTO TABLE1 (Champ1, Champ2) Values (10, #" & Date & "#)"

les chers dièses (#) que l'on doit mettre avant une date

Merci tout de même de vous être pencher sur mon problème.

@ +

Denis P

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
> Salut Dominic, salut Denis! :O)
>
>
> si le champs est de type date ça passera peut-être pas... (sous SQL


Server
> du moins ça ne passe pas..).. il faudra la re"caster" du côté SQL..
>
> quelque chose comme :
> '***
> sQuery = "insert into table1(champ1, champ2) values('test', cast('"


&
> Now & "' as datetime))"
> '***
>
>
>
> un autre bon truc éviter les problèmes de format de date, c'est de


passer
la
> valeur en nombre de jour.
>
> si tu converti une date en Single ou en Double, la partie entière te
renvoi
> le nombre de jour depuis 30 Décembre 1899 et a la partie décimal


contient
> l'heure (0 pour minuit, 0,5 pour midi..). Tu pourrais donc reconvertir
cette
> valeur du côté SQL..
>
> quelque chose comme :
> '***
> sQuery = "insert into table1(champ1, champ2) values('test', cast(" &
> CDbl(Now) & " as datetime))"
> '***
>
> --
> Cordialement
> Yanick Lefebvre - MVP pour Visual Basic
> http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
> http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
>
> Merci de poster les réponses au groupe afin d'en faire profiter à tous
>
>




Avatar
Zoury
aaaaaaaaaarrrrggghhhhhh!! j'l'oublie tout le temps ça!! Merci du rappelle!
;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Zoury
> un autre bon truc éviter les problèmes de format de date, c'est de passer


la
valeur en nombre de jour.
si tu converti une date en Single ou en Double, la partie entière te


renvoi
le nombre de jour depuis 30 Décembre 1899 et a la partie décimal contient
l'heure (0 pour minuit, 0,5 pour midi..). Tu pourrais donc reconvertir


cette
valeur du côté SQL..



Je viens de faire une découverte assez étonnante à ce sujet..

Le format de Date de Visual Studio (6.0 ou .NET) te renvoi le nombre de
jours écoulé depuis le 30 décembre 1899 alors que SQL Server renvoit le
nombre de jour écoulé depuis le 1 janvier 1900... il faut donc enlever 2 au
nombre avant de le reconvertir dans le SQL afin d'avoir la même valeur dans
les 2 systèmes... :O/

Maintenant la nouvelle question est.. mais à quoi les concepteurs ont-ils
pensé??? ;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
+The_Taco+
Il y a eu une chicane dans 2 départements. La conclusion: chacun a fait à sa
tête :)

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
> un autre bon truc éviter les problèmes de format de date, c'est de


passer
la
> valeur en nombre de jour.
> si tu converti une date en Single ou en Double, la partie entière te
renvoi
> le nombre de jour depuis 30 Décembre 1899 et a la partie décimal


contient
> l'heure (0 pour minuit, 0,5 pour midi..). Tu pourrais donc reconvertir
cette
> valeur du côté SQL..

Je viens de faire une découverte assez étonnante à ce sujet..

Le format de Date de Visual Studio (6.0 ou .NET) te renvoi le nombre de
jours écoulé depuis le 30 décembre 1899 alors que SQL Server renvoit le
nombre de jour écoulé depuis le 1 janvier 1900... il faut donc enlever 2


au
nombre avant de le reconvertir dans le SQL afin d'avoir la même valeur


dans
les 2 systèmes... :O/

Maintenant la nouvelle question est.. mais à quoi les concepteurs ont-ils
pensé??? ;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous