Sql & Date? Problème malgré les réponse du forum sur le sujet. Important!!!!

Résolu
cs_kouvolo68 Messages postés 6 Date d'inscription dimanche 19 janvier 2003 Statut Membre Dernière intervention 20 mai 2005 - 18 mai 2005 à 19:16
vincentstryckmans Messages postés 228 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 octobre 2006 - 23 mai 2005 à 08:02
Salut,
Delphi 6(Ado) et access2000

Ma requete doit afficher les commandes de la journée :
Query.SQL.text:='SELECT * FROM commande WHERE date='+datetostr(date);

'date ici est le mot clé date de delphi mais je l'ai fait aussi en récupérant la date dans un TEdit mais j'ai toujours le même problème.

(mon champ date est du type date de access )

et voici l'erreur que j'ai
[Erreur] principal.pas(70): Types incompatibles : 'String' et 'TDateTime'

ça m'oblige donc a changé le type dans la base de donné et à prendre un string mais dans ce cas la requete ne me renvoi pas les éléments juste (ce qui est logique).

Merci de me répondre j'ai besoin de résoudre ce problème pour avancer dans mon travail.
Merci

kouvolo68

7 réponses

cs_kouvolo68 Messages postés 6 Date d'inscription dimanche 19 janvier 2003 Statut Membre Dernière intervention 20 mai 2005
20 mai 2005 à 21:17
Merci de vos réponses

Il faut dire que la première réponse de Ellde ma aidé mais a lieu de

Query.SQL.text:='SELECT * FROM commande WHERE date=:ladate';
Query.ParamByName('ladate').AsDateTime := Date;

j'ai du faire ça

Query.SQL.text:='SELECT * FROM commande WHERE date=:ladate';
Query.Parameters.ParamByName('ladate').value := Date;

c'est donc différentde son code mais c'est lui qui ma aidée,merci.
Au sujet du type string à la place du type comme on dit moldov et sim51 j'y ai pensé et ça marche quand on une requete pour pour une date comme ce que j'ai demandé mais ca marche pas si on veut avoir un un requete qui ramène un résultat compris entre deux date, je donne un exemple:

Query.SQL.Text:='SELECT * FROM magasin WHERE date BETWEEN'+(edit1.Text)+'AND'+ (edit2.Text);

dans ce cas si on veut les données du magasin compris entre le 05/02/2005 et le 30/04/2005 et que le 02/03/2005 existe dans la table , l'enregistrement au 02/03/2005 n'apparaitra pas dans les résultats car 02 est inférieur à 05 (j'espère que vous comprenez) parce que étant des string la comparaison ce caratère par caractère.
Essayer et vous direz et sivous trouvez un moyen de faire marché une telle requete pendant que les date son tu type string envoyé moi le resultat tres vite. Réfléchissé y. Merci encore.

kouvolokouvolo
3
ellde Messages postés 12 Date d'inscription mercredi 15 décembre 2004 Statut Membre Dernière intervention 10 mai 2008
18 mai 2005 à 20:46
Essais ça :

Query.SQL.text:='SELECT * FROM commande WHERE date=" '+datetostr(date) + ' " ';


ou ça



Query.SQL.text:='SELECT * FROM commande WHERE date=:ladate';

Query.ParamByName('ladate').AsDateTime := Date;





Elldé
0
ellde Messages postés 12 Date d'inscription mercredi 15 décembre 2004 Statut Membre Dernière intervention 10 mai 2008
18 mai 2005 à 20:50
Peut être que le problème viens aussi du fait que ton champs se nomme DATE, moi ça me pose problème en interbase...

Elldé
0
moldov Messages postés 165 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 10 novembre 2008
19 mai 2005 à 13:29
Salut,



Moi quand j'ai une date a gerer je met mon champs date en type string dans ma base et ta requete deviens



Query.SQL.text:='SELECT * FROM commande WHERE date = '+QuotedStr(Date);



Dans ce cas moi j'ai pas de probleme ca marche bien, car le format sting de la date est jj/mm/aaaa

Attention il faut que dans ta base tu l'ai rentré en type String quand tu insere la commande.



var

date : string;

begin

Query.SQL.text:= 'INSERT INTO commande(.....,date,....) VALUES (.......,'+QuotedStr(date)+',.......)';





Bonne Prog
0

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

Posez votre question
vincentstryckmans Messages postés 228 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 octobre 2006
19 mai 2005 à 17:27
J'ai du lire une table access 97 et la transposer en Interbase. Le
filtre sur le champ date-heure de la table sauvegarde permettait de
trier les événements ayant eu lieu par exemple du 14/05/2005 00:00:00
jusque et y compris 14/05/2005 23:59:59



Voici ce que j'ai utilisé comme code :



date_00h00_mdb := formatdatetime('"#"mm/dd/yyyy"#"',date_00h00);

date_23h59_mdb := formatdatetime('"#"mm/dd/yyyy"#"',date_00h00+1);



filtre_date :=
'sauvegarde.[Date-Heure] >= '+date_00h00_mdb + ' and
sauvegarde.[Date-Heure] < '+date_23h59_mdb;



Fais aussi attention au format de la date. Nous européens écrivons
d'abord le jour puis le mois. Les yankees écrivent le mois puis le
jour, d'où le format mm/dd/yyyy au lieu de dd/mm/yyyy


Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.

Vincent Stryckmans.
0
cs_sim51 Messages postés 240 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 31 décembre 2006 2
20 mai 2005 à 14:31
Oui je pense que ton problème provient surment d'une erreur de type de date entre le type date de delphi et le type date d'access. Regarde dans les aides des programmes respectif, moi j'ai eu le même problème avec java et postgresql, et on peut généralement choisir entre différent type de date possible (justement à cause de ces problèmes ).
Sinon si tu y arrives pas, je te conseil comme qq1 l'a déjà fait, de mettre un type string pour la date de ta bdd, puis tu choisis toi même le type que tu veux sauf que ce sera un type string, et dans tes requêtes select cela ne posera pas de prob si tu suis toujours la même typographie.
Enfin voilà dis nous si tu veux de plus ample information



N'oubliez pas de cliquer sur réponse acceptée si la réponse vous convient !!!
0
vincentstryckmans Messages postés 228 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 octobre 2006
23 mai 2005 à 08:02
A ta place, je ne me casserai pas la tête à vouloir comparer des dates enregistrées sous forme de string.

Modifie tes tables en conséquence pour que ton champ date soit du type timestamp :

1. créer un champ date_bis au format timestamp

2. exécuter le script de transfert

3. effacer le champ date au format string

4. renommer le champ date_bis



Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.

Vincent Stryckmans.
0
Rejoignez-nous