Discussion: bde paradox et date
Afficher un message
Vieux 13/10/2007, 13h00   #8
Faust
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: bde paradox et date

/Après mure réflexion, _Ameno_ a écrit/ :
> Faust a écrit :
>> /_Ameno_ a exposé/ :
>>> Bonjour,
>>> J'arrive pas a exécuter une requette sql ou il ya un champ date.

>>
>>> data.Query2.active:=False;
>>> data.Query2.sql.Clear;
>>> data.Query2.sql.Add( 'SELECT sum(mt_régler) as Total FROM T_Ventes');
>>> data.Query2.sql.Add ('where type=''Facture'' or type=''BL'' and
>>> regler=true and Date=:dte');
>>> data.Query2.ParamByName(':dte').AsDate:=strtodate( formatdatetime('mm/dd/yyyy',now));
>>>
>>> data.Query2.Active:=True;
>>> totalca:=data.Query2.FieldByName('Total').AsCurren cy;

>>
>>> Merci pour l'aide

>>
>> beaucoup de choses à dire:
>>
>> data.Query2.ParamByName(':dte').AsDate:=strtodate( formatdatetime('mm/dd/yyyy',now));
>>
>> t'as pas plus compliqué encore??????
>>
>> tu prends la peine de mettre un paramètre, de le renseigner AsDate mais
>> non, il faut que tu te casse la tête à le convertir en string et à la
>> reconvertir en Date (on dirait du code de la vcl pour le coup.... et crois
>> moi c'est pas forcément un compliment)
>> data.Query2.ParamByName(':dte').AsDate:= trunc(now);
>> c'est bien suffisant
>>
>> sinon, attention à la priorité des and et des or
>> ce que tu as ecrit revient à
>> type = facture or ((type = bl and regler = true) and date = :dte)
>> je suppose que tu voulais plutôt:
>> (type = ''Facture'' or type = ''BL'') and regler = true and Date = :dte
>> ou
>> type in (''Facture'', ''BL'') and regler = true and Date = :dte
>>
>> une fois ce point réglé, deux choses:
>> - je ne sais pas quel moteur de base de données se cache derrière le bde
>> mais "regler = true", je connais très peu de moteur qui l'accepte (et si tu
>> utilise paradox, si tu as encore le temps, je te suggère vivement d'y
>> renoncer et d'utiliser, par exemple, firebird... embbed ou non)
>> - Date est _très_ souvent un mot clé... comme nom champ c'est très très
>> très mal choisi... avec certains moteur ça passe (paradox notamment) avec
>> d'autre ça ne passe pas ou mal... donc encore une fois, en fonction du
>> moteur qui se cache derrière le bde le problème peut etre là
>>
>> enfin, dans ta requête, tu passe uniquement la date au paramètre dte...
>> c'est peut-etre voulu mais attention, si ton champ Date n'est pas justement
>> _uniquement_ de type date (comprendre en fait il est de type date.heure)
>> alors le test Date = trunc(now) ne sera vérifié QUE si Date est à la date
>> du jour à minuit pile (à la miliseconde près)
>>

> Bonjour,
> Merci pour votre explication.
> J'arrive toujours pas a faire exécuter ma requette.
> Voici l'erreur ( Invalid use of keyword. Tokern: Date=? Line Number: 2.)


> Merci


pour compléter la réponse de BigGrizzly, il faut encadrer les noms de
champs et de table par des " s'ils correspondent aussi à des mots clés:

(type = ''Facture'' or type = ''BL'') and regler = true and "Date" =
:dte

--
*/Teträm/*
http://www.tetram.org

"On a toujours tort d'essayer d'avoir raison devant des gens qui ont
toutes les bonnes raisons de croire qu'ils n'ont pas tort !" - Raymond
Devos


  Réponse avec citation
 
Page generated in 0,07177 seconds with 9 queries