|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
> 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 pourquoi passer par un passage de paramètre dans une construction de requête dynamique ? -- Dominique |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
/_TedIF_ a écrit/ :
>> 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 > pourquoi passer par un passage de paramètre dans une construction de requête > dynamique ? - pour éviter d'avoir à encoder les dates en string - parce que la requête va peut etre être réexécutée plus loin - parce que c'est plus lisible -- */Teträm/* http://www.tetram.org "Tape d'abord, tape ensuite, et tape pour finir" - Proverbe Troll |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
/_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) -- */Teträm/* http://www.tetram.org « Chérie, viens à table, le murloc va refroidir ! » |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
Faust a écrit :
> data.Query2.ParamByName(':dte').AsDate:= trunc(now); Il existe même la fonction Date. |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
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 > "date" de préférence. Car c'est un mot réservé. |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
/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 |
|
![]() |
| Outils de la discussion | |
|
|