Re: bde paradox et date
Faust a écrit :
> /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
>
Salut,
Autre type d'erreur : Type mismatch in expression.
|