Différence de type dans une expression (avec champ TimeStamp)

cs_MMarc Messages postés 5 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 22 juillet 2002 - 17 juil. 2002 à 11:12
tgomas Messages postés 21 Date d'inscription lundi 24 juin 2002 Statut Membre Dernière intervention 19 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"

Bien à vous

Merci

6 réponses

tgomas Messages postés 21 Date d'inscription lundi 24 juin 2002 Statut Membre Dernière intervention 19 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.

par contre il y aura une perte de précision.
0
cs_MMarc Messages postés 5 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 22 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
0
tgomas Messages postés 21 Date d'inscription lundi 24 juin 2002 Statut Membre Dernière intervention 19 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
0
cs_MMarc Messages postés 5 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 22 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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tgomas Messages postés 21 Date d'inscription lundi 24 juin 2002 Statut Membre Dernière intervention 19 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.

bonne chance.
0
tgomas Messages postés 21 Date d'inscription lundi 24 juin 2002 Statut Membre Dernière intervention 19 août 2002
25 juil. 2002 à 16:17
sinon il existe aussi le type TSQLTimeStamp
à essayer ;)
0
Rejoignez-nous