Différence de type dans une expression (avec champ TimeStamp)
cs_MMarc
Messages postés5Date d'inscriptionmercredi 17 juillet 2002StatutMembreDernière intervention22 juillet 2002
-
17 juil. 2002 à 11:12
tgomas
Messages postés21Date d'inscriptionlundi 24 juin 2002StatutMembreDernière intervention19 août 2002
-
25 juil. 2002 à 16:17
Bonjour,
je voudrais écrire une requête simple sur une table PARADOX du style
"Select * from TableName where FieldName = :p1"
avec p1 correspondant à une Date du type TimeStamp.
Je n'arrive pas à passer la date en paramètre.
J'ai le message "Différence de type dans une expression"
tgomas
Messages postés21Date d'inscriptionlundi 24 juin 2002StatutMembreDernière intervention19 août 2002 17 juil. 2002 à 14:16
les champs de type Date peuvent être paramétrés par des objets de type DateTime, il faut donc convertir la date avant de la passer en paramètre.
la fonction TimeStampToDateTime() permet cette conversion.
cs_MMarc
Messages postés5Date d'inscriptionmercredi 17 juillet 2002StatutMembreDernière intervention22 juillet 2002 17 juil. 2002 à 14:44
Merci pour la réponse mais je crois que ma question n'était pas assez précise
D'abord il faut savoir que le programme qui utilise cette requête attaque une base de données soit INFORMIX soit PARADOX.
La définition du champ en INFORMIX est un DateTime et en PARADOX un TimeStamp.
Quand ma db est INFORMIX, je connais ma valeur de Date en DateTime et je passe la valeur de la date en paramètre
via ...ParamByName('p1').AsDateTime := [DateTimeValue]
Mais quand je dois passer la valeur de la Date pour PARADOX, je sais convertir ma DateTime en TimeStamp via
la fonction DateTimeToTimeStamp() mais après comment passer la valeur de TimeStamp dans le paramètre :p1
tgomas
Messages postés21Date d'inscriptionlundi 24 juin 2002StatutMembreDernière intervention19 août 2002 17 juil. 2002 à 15:21
ma réponse reste la même ;)
je m'explique:
j'ai une appli avec une BD Paradox contenant une table avec un champ de type Timestamp, mais quand je veux ajouter un enregistrement avec une valeur pour ce champ j'utilise un objet de type DateTime.
effectivement je fais un insertrecord et non pas un parambyname, mais je pense que ça doit aussi marcher.
peux tu essayer et me tenir au courant?
merci
cs_MMarc
Messages postés5Date d'inscriptionmercredi 17 juillet 2002StatutMembreDernière intervention22 juillet 2002 22 juil. 2002 à 16:31
je pensais t'avoir répondu assez vite et je me rend compte que ma réponse n'est peut-être pas passée.
Je renvoie donc ma réponse quitte à me répéter
Les UPDATE et INSERT passent sans problèmes mais c'est lorsque le champ TimeStamp se trouve dans un WHERE
EXemple:
RequeteTrav.Close;
RequeteTrav.SQL.Clear;
RequeteTrav.Active:=False;
RequeteTrav.SQL.Add('INSERT INTO Table1 SELECT * FROM Table2 WHERE date = :p1');
si INFORMIX
RequeteTrav.ParamByName('p1').AsDateTime := DateValue; (avec DateValue : TDateTime;
si PARADOX
RequeteTrav.ParamByName('p1').??? := DateValue; (avec DateValue : TTimeStamp);
RequeteTrav.ExecSQL;
Je cherche donc à savoir que mettre à la place des ??? ou si il y a une autre méthode
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
tgomas
Messages postés21Date d'inscriptionlundi 24 juin 2002StatutMembreDernière intervention19 août 2002 22 juil. 2002 à 18:16
Effectivement c'est plus compliqué que ce que je pensais.
Si tu ne trouves pas de solution simple il te reste toujours la possibilité de récupérer les données sous Delphi, de faire le tri avec Delphi et de rajouter les enregistrements un par un dans la table. C'est un peu lourd, mais ça peut marcher.