yotamanga
Messages postés9Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention29 mai 2007
-
16 avril 2007 à 11:33
yotamanga
Messages postés9Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention29 mai 2007
-
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;
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
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 16 avril 2007 à 11:55
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.
yotamanga
Messages postés9Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention29 mai 2007 16 avril 2007 à 12:34
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
jelume
Messages postés120Date d'inscriptionmardi 3 avril 2007StatutMembreDernière intervention15 novembre 20071 16 avril 2007 à 12:45
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
yotamanga
Messages postés9Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention29 mai 2007 16 avril 2007 à 13:02
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)
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 16 avril 2007 à 13:15
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.
yotamanga
Messages postés9Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention29 mai 2007 16 avril 2007 à 14:07
"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.
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 16 avril 2007 à 15:18
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.