Re: bde paradox et date
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
|