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

Signaler
Messages postés
9
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
29 mai 2007
-
Messages postés
9
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
29 mai 2007
-
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

11 réponses

Messages postés
9
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
29 mai 2007

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
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
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.
Messages postés
9
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
29 mai 2007

 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
Messages postés
9
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
29 mai 2007

hum logiquement cela devrait donner ='20/04/2007'
>_< je comprend plus rien
Messages postés
120
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
15 novembre 2007
1
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
Messages postés
9
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
29 mai 2007

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)
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
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.
Messages postés
120
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
15 novembre 2007
1
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 ;
Messages postés
9
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
29 mai 2007

"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.
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
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.
Messages postés
9
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
29 mai 2007

pour moi cela vient d'acces >_<. Je vais chercher sur cette piste