Requête qui ne marche pas...et query

Résolu/Fermé
810mcu Messages postés 86 Date d'inscription samedi 28 août 2004 Statut Membre Dernière intervention 30 janvier 2014 - 28 nov. 2007 à 16:45
cs_Keneda Messages postés 32 Date d'inscription jeudi 8 mai 2003 Statut Membre Dernière intervention 3 octobre 2012 - 29 nov. 2007 à 15:02
De l’aide SVP,
Bonjour a tous, voila

Matable a/ Access en D6
champDate<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

 

J’écris le query,

Edit50 et Edit51 on respectivement date début et fin

query.SQL.Add('matable.champdate >= '+ Edit50.Text +' ');

et

query.SQL.Add('matable.champdate <= '+ Edit51.Text +' ');

 

le query me donne

select

matable.*

FROM

matable

Where
matable.champdate ><?xml:namespace prefix st1 ns = "urn:schemas-microsoft-com:office:smarttags" /??><st1:date month="5" day="1" year="2005">01/05/2005</st1:date>

and

matable.champdate <= <st1:date month="5" day="31" year="2005">31/05/2005</st1:date>

 

ça ne marche pas, par ce que je peut comprendre il n’interprète pas le Edit50.text comme étant 1 date mais oui un texte (aussi cet edit reçoit ça date a partir datatimer)

j’ai aussi essayer avec «’’’» ça ne marche tj pas...

 

de l’aide SVP, ou est-ce que je me goure…
Merci a tous
810mcu

8 réponses

cs_Keneda Messages postés 32 Date d'inscription jeudi 8 mai 2003 Statut Membre Dernière intervention 3 octobre 2012
29 nov. 2007 à 15:02
Salut 810Mcu


 


utilise des paramètres dans ta query tu ne seras plus ennuyé par ton formatage
les champs dates sont des réels pour Delphi (comme d'ailleurs la plupart des moteur de base de données) un TDateTime sous Delphi est un réel dont la partie entière représente le nombre de jour depuis le 30/12/1899 et la partie décimale la portion d'heure depuis "l'allumage" de ton pc

enfin, revenons à nos moutons dans un TQuery, un TADOQuery, peut importe dans un Query
de Delphi, tu peux employer des paramètres pour ne pas être ennuyer avec le transtypage.

un paramètre peux avoir n'importequel nom il doit être précédé de ":" (deux point) juste devant
(sans espace, collé au nom)  ici, on aura besoin de deux paramètres:

 :DateDebut et :DateFin (car tu veux un ensemble de données dans un interval de date donnée)

ta requête donne ça:

Query.SQL.Add('SELECT matable.* FROM matable');Query.SQL.Add('Where matable.champdate ><?xml:namespace prefix st1 ns = "urn:schemas-microsoft-com:office:smarttags" /??><st1:date year="2005" day="1" month="5">:DateDebut');
</st1:date>Query.SQL.Add('and      matable.champdate <= :DateFin');

ensuite, il faut affecter les valeurs à tes paramètres

via un TQuery tu auras (attention, ici, il ne faut plus mettre les 2 points)

Query.ParamByName('DateDebut').AsDateTime:= StrToDate(Edit50.Text);
Query.ParamByName('DateFin').AsDateTime    := StrToDate(Edit51.Text);

Ensuite tu fais ton Query.Open;

via un TAdoQuery, il faudra passer par un variant

Query.Parameters.ParamByName('DateDebut').Value:= StrToDate(Edit50.Text);
Query.Parameters.ParamByName('DateFin').Value    := StrToDate(Edit51.Text);

puis tu fais ton Query.Open;

Le traitement sur les dates et toujours difficile, il vaut mieux travailler avec des réels
et traiter les dates dans le source plutôt que de traiter des dates directement dans le SGBDR
car si tu as un programme international tu seras toujours ennuyé avec les paramètres régionaux
(séparateur de date, format de date, etc.)

Voila, j'espère avoir pu t'aider, n'hésites pas dans le cas contraire

bon courage à tous

Keneda


 









Keneda, la fusée rouge
3
810mcu Messages postés 86 Date d'inscription samedi 28 août 2004 Statut Membre Dernière intervention 30 janvier 2014
28 nov. 2007 à 16:50
j’ai aussi essayer avec



query.SQL.Add('matable.champdate

>= '+ QuotedStr(Edit50.Text) +' ');


et


query.SQL.Add('matable.champdate <= '+ QuotedStr(Edit51.Text) +' ');

tj negatif...<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
0
810mcu Messages postés 86 Date d'inscription samedi 28 août 2004 Statut Membre Dernière intervention 30 janvier 2014
28 nov. 2007 à 16:50
j’ai aussi essayer avec



query.SQL.Add('matable.champdate

>= '+ QuotedStr(Edit50.Text) +' ');


et


query.SQL.Add('matable.champdate <= '+ QuotedStr(Edit51.Text) +' ');

tj negatif...<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
0
Oniria Messages postés 292 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 18 décembre 2014 3
28 nov. 2007 à 17:56
BOnjour,

les dates en sql s'écrivent pour 22/11/2007 , elles s'écrivent : 2007-11-22, sinon, tes deux comparaisons de dates, met les dans des parenthéses comme ca :

select

matable.*

FROM

matable

Where

((matable.champdate >= <st1:date month="5" day="1" year="2005">2005-05-01)</st1:date>

and

(matable.champdate <= 2005<st1:date month="5" day="31" year="2005">-05-05))</st1:date>

<st1:date month="5" day="31" year="2005"></st1:date>

<st1:date month="5" day="31" year="2005">j'ai déja eu se probléme avec MySQL.
</st1:date>

<st1:date month="5" day="31" year="2005">
</st1:date>

Oniria
0

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

Posez votre question
810mcu Messages postés 86 Date d'inscription samedi 28 août 2004 Statut Membre Dernière intervention 30 janvier 2014
28 nov. 2007 à 18:12
la il execute le query mais ne trouve rien comme resultat ??? et je suis sur qu'il y a des données, certain !!!!


select
matable.*


FROM
matable
Where
(matable.champdate>=01/05/2005 )
and
(matable.champdate<=28/11/2007 )
order by champdate



avec comme code
query.SQL.Add('(matable.date>='+ Edit50.Text +' )');
et
query.SQL.Add('(matable.date<='+ Edit51.Text +' )');

810mcu
0
810mcu Messages postés 86 Date d'inscription samedi 28 août 2004 Statut Membre Dernière intervention 30 janvier 2014
28 nov. 2007 à 18:36
la aussi la requete s'execute mais tj pas de resultat ???
étrange tout ça....... et mon champdate et bel et bien une date,
select
matable.*





FROM
matable
Where
((matable.champdate>= 01/05/2005 )
and
(matable.champdate<=28/11/2007 ) )
order by champdate



avec comme code
query.SQL.Add('((matable.champdate> ='+ Edit50.Text +' )');
et
query.SQL.Add('(matable.champdate<='+ Edit51.Text +' ))');

sur une autre requete j'utilise
query.SQL.Add('matable.data_export Like ' + QuotedStr(Label75.Caption) + ' ');
et ça passe comme sur des roulettes a rien comprendre, 1 champ aussi date sur le format (jj/mm/aaaa) vraiment a rien comprendre

810mcu
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
28 nov. 2007 à 22:36
@810mcu : relis calmement la réponse d'Oniria ci-dessus et arrête de flooder stp.

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.afipa.net/
0
cs_pers Messages postés 38 Date d'inscription vendredi 2 mai 2003 Statut Membre Dernière intervention 9 décembre 2009
29 nov. 2007 à 12:36
Salut

La syntaxe ne serait pas plutôt

select

matable.*

FROM

matable

Where

matable.champdate >= <st1:date month="5" day="1" year="2005">#01/05/2005#</st1:date>

and

matable.champdate <= <st1:date month="5" day="31" year="2005">#31/05/2005#</st1:date>

Bonne journée
0
Rejoignez-nous