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

Signaler
Messages postés
5
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
22 juillet 2002
-
Messages postés
21
Date d'inscription
lundi 24 juin 2002
Statut
Membre
Dernière intervention
19 août 2002
-
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

Messages postés
21
Date d'inscription
lundi 24 juin 2002
Statut
Membre
Dernière intervention
19 août 2002

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.
Messages postés
5
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
22 juillet 2002

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

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
Messages postés
5
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
22 juillet 2002

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

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

sinon il existe aussi le type TSQLTimeStamp
à essayer ;)