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

Messages postés
6
Date d'inscription
dimanche 19 janvier 2003
Dernière intervention
20 mai 2005
- 18 mai 2005 à 19:16 - Dernière réponse :
Messages postés
230
Date d'inscription
lundi 5 avril 2004
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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
6
Date d'inscription
dimanche 19 janvier 2003
Dernière intervention
20 mai 2005
- 20 mai 2005 à 21:17
3
Merci
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

Merci cs_kouvolo68 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de cs_kouvolo68
Messages postés
12
Date d'inscription
mercredi 15 décembre 2004
Dernière intervention
10 mai 2008
- 18 mai 2005 à 20:46
0
Merci
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é
Commenter la réponse de ellde
Messages postés
12
Date d'inscription
mercredi 15 décembre 2004
Dernière intervention
10 mai 2008
- 18 mai 2005 à 20:50
0
Merci
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é
Commenter la réponse de ellde
Messages postés
168
Date d'inscription
mercredi 8 octobre 2003
Dernière intervention
10 novembre 2008
- 19 mai 2005 à 13:29
0
Merci
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
Commenter la réponse de moldov
Messages postés
230
Date d'inscription
lundi 5 avril 2004
Dernière intervention
25 octobre 2006
- 19 mai 2005 à 17:27
0
Merci
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.
Commenter la réponse de vincentstryckmans
Messages postés
314
Date d'inscription
dimanche 31 octobre 2004
Dernière intervention
31 décembre 2006
- 20 mai 2005 à 14:31
0
Merci
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 !!!
Commenter la réponse de cs_sim51
Messages postés
230
Date d'inscription
lundi 5 avril 2004
Dernière intervention
25 octobre 2006
- 23 mai 2005 à 08:02
0
Merci
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.
Commenter la réponse de vincentstryckmans

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.