Requête qui ne marche pas...et query [Résolu/Fermé]

810mcu 87 Messages postés samedi 28 août 2004Date d'inscription 30 janvier 2014 Dernière intervention - 28 nov. 2007 à 16:45 - Dernière réponse : 810mcu 87 Messages postés samedi 28 août 2004Date d'inscription 30 janvier 2014 Dernière intervention
- 29 nov. 2007 à 18:06
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
Afficher la suite 

9 réponses

cs_Keneda 36 Messages postés jeudi 8 mai 2003Date d'inscription 3 octobre 2012 Dernière intervention - 29 nov. 2007 à 15:02
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Keneda
810mcu 87 Messages postés samedi 28 août 2004Date d'inscription 30 janvier 2014 Dernière intervention - 28 nov. 2007 à 16:50
0
Utile
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" /??>
Commenter la réponse de 810mcu
810mcu 87 Messages postés samedi 28 août 2004Date d'inscription 30 janvier 2014 Dernière intervention - 28 nov. 2007 à 16:50
0
Utile
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" /??>
Commenter la réponse de 810mcu
Oniria 297 Messages postés dimanche 14 mars 2004Date d'inscription 18 décembre 2014 Dernière intervention - 28 nov. 2007 à 17:56
0
Utile
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
Commenter la réponse de Oniria
810mcu 87 Messages postés samedi 28 août 2004Date d'inscription 30 janvier 2014 Dernière intervention - 28 nov. 2007 à 18:12
0
Utile
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
Commenter la réponse de 810mcu
810mcu 87 Messages postés samedi 28 août 2004Date d'inscription 30 janvier 2014 Dernière intervention - 28 nov. 2007 à 18:36
0
Utile
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
Commenter la réponse de 810mcu
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 28 nov. 2007 à 22:36
0
Utile
@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/
Commenter la réponse de cs_Delphiprog
cs_pers 40 Messages postés vendredi 2 mai 2003Date d'inscription 9 décembre 2009 Dernière intervention - 29 nov. 2007 à 12:36
0
Utile
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
Commenter la réponse de cs_pers
810mcu 87 Messages postés samedi 28 août 2004Date d'inscription 30 janvier 2014 Dernière intervention - 29 nov. 2007 à 18:06
0
Utile
Salut à tous,
Je tiens à remercier tout le monde,


De vs critiques, suggestion et aide.



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Apres mil et une tentatives et essais je me suis rendu a l’évidence que


La procédure la plus efficace dans la plus part des cas serais bel et bien celle


Propose par Keneda (pour éviter tout ce qu’il a cité)



que je remercie comme a vous tous également

merci à tous
810mcu.
Commenter la réponse de 810mcu

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.