Pb date différente une fois dans la base de donnéee [Résolu]

yotamanga 9 Messages postés lundi 5 décembre 2005Date d'inscription 29 mai 2007 Dernière intervention - 16 avril 2007 à 11:33 - Dernière réponse : yotamanga 9 Messages postés lundi 5 décembre 2005Date d'inscription 29 mai 2007 Dernière intervention
- 16 avril 2007 à 16:03
Bonjour, je viens chercher de l'aide auprès de vous. Je début en delphi.
Voici mon probleme :

j'ai une date que je veux insérer dans un base de données [access]. L'insertion se fait mais il y a un truc qui va pas.
a la place d'avoir la date du jour ( par exemple) j' ai cela : 30/12/1899 00:02:52   oO;
C'est assez bizarre car lorsque j'affiche la date sur delphi cela me donne bien la date du genre : 16/04/2007 .
Mon champ date_injection est en date,abrégée sous [access]

voila la procédure d'insertion

procedure TInjection.Insert(date : TDate);

begin
agenda.adq.SQL.Clear ;
agenda.adq.SQL.Add('Insert into injection (date_injection) Values(' + FormatDateTime('dd/mm/yyyy',date) +')');
agenda.adq.ExecSQL;
agenda.adq.Close ;
end;

En espérant votre aide, cordialement , Yota
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
yotamanga 9 Messages postés lundi 5 décembre 2005Date d'inscription 29 mai 2007 Dernière intervention - 16 avril 2007 à 16:03
3
Merci
c'est fait , cela marche .
Apparement, il faut stocker le formatdate dans une variable string et l envoyée avecQuotedStr()

procedure TInjection.Insert(date : TDate);

begin

agenda.mem1.lines.add(floattostr(date));
agenda.mem1.lines.add(FormatDateTime('dd/mm/yyyy',date));
agenda.Edit2.Text := FormatDateTime('dd/mm/yyyy',date);

agenda.adq.SQL.Clear ;
agenda.adq.SQL.Add('Insert into injection (date_injection) Values(' + QuotedStr(agenda.Edit2.Text) +')');
agenda.adq.ExecSQL;
agenda.adq.Close ;
end;

Je vous remercie sincérement tous les deux !!

et pis je remercie aussi le fait de m avoir injecter mon traitement dans un vaisseau sanguin , m empechant de bouger la jambe et de rester ici a bosser

Merci yotamanga 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de yotamanga
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 16 avril 2007 à 11:55
0
Merci
salut,

je suis pas baléze en BD, mais je trouve ton problème curieux.

c'est bizarre, on dirait un problème de format de date ou une confusion entre time/now ou DateToStr/TimeToStr (vu que "0.0" en date Delphi c'est le 30/12/1899) mais c'est pas le cas (vu que tu utilise FormatDateTime et que le type access commence à l'année 100).

pourrais-tu ajouter:

outputdebugstring(pchar(floattostr(date)));
outputdebugstring(pchar(FormatDateTime('dd/mm/yyyy',date)));
ou
mem1.lines.add(floattostr(date));
mem1.lines.add(FormatDateTime('dd/mm/yyyy',date));

avant ta requet (SQL.Clear)
et nous donner la sortie?

sinon, pour faire un test, essayer d'ajouter un champs de type string dans ta BD et de sauver ta date comme string. (juste pour voir de quel côté est le problème)

Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Commenter la réponse de cs_Loda
yotamanga 9 Messages postés lundi 5 décembre 2005Date d'inscription 29 mai 2007 Dernière intervention - 16 avril 2007 à 12:34
0
Merci
 merci pour la réponse rapide

Pour le memo, cela donne :
mem1
39192,5172388542
20/04/2007

Pour l insertion dans un champ de type string sa donne :

sans changer le code d'insertion:
3,23866467364225E-03
en changeant le  code d'insertion en le mettant en string : (DateToStr(date)) :
3,23866467364225E-03
enfin la meme chose lol
Commenter la réponse de yotamanga
yotamanga 9 Messages postés lundi 5 décembre 2005Date d'inscription 29 mai 2007 Dernière intervention - 16 avril 2007 à 12:37
0
Merci
hum logiquement cela devrait donner ='20/04/2007'
>_< je comprend plus rien
Commenter la réponse de yotamanga
jelume 122 Messages postés mardi 3 avril 2007Date d'inscription 15 novembre 2007 Dernière intervention - 16 avril 2007 à 12:45
0
Merci
Bonjour

je vais me répéter encore une fois :-) mais il est tellement plus simple d'utiliser les parameters.
Sinon, le format de date pour access n'est sans doute pas celui que tu utilises.
Regardes dans ta table, le format du champ date.
Ou éventuellement, testes directement dans ton code delphi le formatage de la date en YYYY/mm/dd

J-L
Commenter la réponse de jelume
yotamanga 9 Messages postés lundi 5 décembre 2005Date d'inscription 29 mai 2007 Dernière intervention - 16 avril 2007 à 13:02
0
Merci
merci pour la réponse !
quand je change mon code delphi avec :YYYY/mm/dd
cela donne dans la base de donée :
17/01/1900 14:00:00 >_<

mon champ dans ma base est en "Date, abrégé" ce qui donne, cela access , jj/mm/aaaa
pourtant j obtiens une date et une heure ce qui correspondrait au format "Date, complet ">_< mais pourtant  le champ est bien en date abrégé >_<

j vais me renseigner sur les parameter ( euh je connais pas comment cela s'utilise)
Commenter la réponse de yotamanga
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 16 avril 2007 à 13:15
0
Merci
re,
"logiquement cela devrait donner = '20/04/2007'" : oui.
donc, tu t'es planté lors de ton test. Vérifie sur quel champs (et de quel type) tu sauve ton string de test. Stp, donne nous le bout de code utilisé.

Aussi, dans ton insert, essaye juste de remplace formatDateTime par DateToStr.(au cas ou c'est un problème de format régional)

sinon, jelume a raison. les paramètres (adq.parameters) peuvent résoudre (et simplier) bien des problèmes. (j'ai résolu un problème de " / : grâce à ce même conseille venant également de lui.)

A part ça, dans bcp d'exemple du net, les date sont "quoted" avec #  genre   #20/121/1900#.
(j'en sais pas plus)

"Mon champ date_injection est en date, abrégée sous [access]" C'est quoi ça? je n'ai pas de format "date abrégée" sur mon access. C'est un format d'affichage? ou de stockage?

Loda

PS: on est le 16 aujourd'hui, pas le 20. ;-)
<hr size ="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Commenter la réponse de cs_Loda
jelume 122 Messages postés mardi 3 avril 2007Date d'inscription 15 novembre 2007 Dernière intervention - 16 avril 2007 à 13:19
0
Merci
un truc dans ce genre là :

agenda.adq.SQL.Clear ;
agenda.adq.SQL.Add('Insert into injection (date_injection) Values(:P)' ;
agenda.adq.Parameters.CreateParameter('P', ftDate, pdInputOutput, SizeOf(TDatetime), nil)
agenda.adq.Parameters[0] := LaDate
agenda.adq.ExecSQL;
agenda.adq.Close ;
Commenter la réponse de jelume
yotamanga 9 Messages postés lundi 5 décembre 2005Date d'inscription 29 mai 2007 Dernière intervention - 16 avril 2007 à 14:07
0
Merci
"Aussi, dans ton insert, essaye juste de remplace formatDateTime par DateToStr.(au cas ou c'est un problème de format régional
)" , cela ne mache pas nan plus.

Pour mon champ date_injection :
types de données  : date/heure
format :date, abrégeée -19/04/1994
apres je pense que c 'est pour le stockage enfin je ne m y connais pas en access j suis plus php/mysql ^^

Pour le test d'affichage :
agenda.date.DateTime := now;
agenda.infooj.Caption := jour[DayOfWeek(agenda.date.DateTime)]+'  '+DateToStr(agenda.date.DateTime);

j'essaie  de me debrouiller avec parameter mais je suis pas doué >_<
mais un grand merci pour vos réponses.
Commenter la réponse de yotamanga
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 16 avril 2007 à 15:18
0
Merci
re,

ton code de test d'affichage m'as l'air correct...

je vois pas. dsl. essai de chager tes format de date sous access.

sinon les parametres, en deux mots:
-c'est  une list de variant nommées
- tu les accede par nom (le plus facile je pense)
- tu dois les ajouter à la list avant de faire la requete. (createParam)
- Ils restent dans la lit de param jusqu'a que tu les effaces. (inutile de les crée à chque requete)
- cela permet (souvent) de conserver la requete sql ("insert ....") (vu que les partie changeante sont justement les parametres)

a+,

Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Commenter la réponse de cs_Loda
yotamanga 9 Messages postés lundi 5 décembre 2005Date d'inscription 29 mai 2007 Dernière intervention - 16 avril 2007 à 15:29
0
Merci
pour moi cela vient d'acces >_<. Je vais chercher sur cette piste
Commenter la réponse de yotamanga

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.