il suffisait de rajouter des parenthèses autour de
Active_Date_depart = "Non"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 procedure TForm1.Button1Click(Sender: TObject); var St1: String; begin St1 := ''''+DateToStr (now)+'''' ; Query1.SQL.Clear; Query1.SQL.Add('select * from corps.DB'); Query1.SQL.Add ('WHERE (Active_Date_depart = "Non") And (Date_arrive)>('+st1+'()-5)'); Query1.Open; end;)
@ALWEBER, tu pourrais lire les autres réponses, tu t'obstines avec ton code alors qu'il contient une coquille !
En plus, ce n'est pas des parenthèses qui manquent mais qu'il y a en trop !
D'ailleurs, celle que tu conseilles autour de Active_Date_depart n'ont aucune utilité en SQL !
A ta décharge, il est vrai que tarmo57 ne cherche pas beaucoup !
Il copie les erreurs au caractère près !
@ALWEBER, problème déjà résolu par Linkin et SergioMaster lié au > et au <=.
> donnant les enregistrements dont la date est supérieure à celle d'il y a 5 jours
<= donnant les enregistrements qui ont plus de 5 jours, ce que qui souhaité par tarmo57
Ci joint un zip qui fonctionne. Effectivement il y avait une coquille
Pour ce qui est du SQL elle est générée automatiquement dans PARADOX
depuis QBE -> SQL d'ou les parenthèses qui ne sont effectivement pas obligatoires dans ce cas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 St1 := ''''+FormatDateTime('dd.mm.yyyy',Now)+''''; Query1.SQL.Clear; Query1.SQL.Add('select * from corps.DB'); Query1.SQL.Add ('WHERE Active_Date_depart = "Non" And (Date_arrive)>('+st1+'-5)'); Query1.Open;
Teste juste cette varianteCela plante carrément !
Code : Sélectionner tout - Visualiser dans une fenêtre à part St1 := ''''+DateToStr (EncodeDate(2011, 12, 30))+'''' ;
puis cette varianteça passe !
Code : Sélectionner tout - Visualiser dans une fenêtre à part St1 := 'CAST('''+DateToStr (EncodeDate(2011, 12, 30))+''' AS DATE)' ;
Teste bien ton code avant de le soumettre en garantissant son exactitude, j'avais déjà pourtant fait la remarque sur le fait que par défaut la date est converti en format américain !
je te laisse apprécier la dangerosité des opérations de date sous Parodox
Pas de Résultat, il n'a pas vu les deux lignes en '01/04/2012' puisqu'il cherche du '04/01/2012'
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select NoFact, Date_Arrive, '01/04/2012' from "corps.db" where Active_Date_depart = "Non" AND Date_Arrive = '01/04/2012'
Nos deux lignes sont revenus !
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select NoFact, Date_Arrive, cast('13/04/2012' as Date) - 12 from "corps.db" where Active_Date_depart = "Non" AND Date_Arrive = cast('13/04/2012' as Date) - 12
Tout aussi fun le '01/02/2012' et '02/01/2012' !
CAST AS DATE choisi le format français si le jour est entre 13 à 31 sinon format américain, ça fume !
Evidemment, cela énerve quand Filter fonctionne mieux qu'un SQL :
Evidemment dans un Filter, il n'est pas possible d'ajouter un - 5, donc conclusion ParamByName
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 St1 := ''''+DateToStr(EncodeDate(2012, 04, 01))+'''' ; Query1.SQL.Clear; Query1.SQL.Add('select * from corps.DB'); Query1.Open; Query1.Filter := 'Active_Date_depart = ''Non'' AND Date_Arrive = ' + St1; Query1.Filtered := true;
FormatdateTime n'est pas mal non plus comme fonction
à noter , la présence des . et non des /
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 St1:=FormatDateTime('dd.mm.yyyy',Date-5)
Envoyé par la mauvaise foi du troll
@shailetroll
suffit de calculer St1 avant
Mais bon ....je hais
les filtres j'adore les paramètres
et qu'on ne me dise pas que Paradox est la crème des SGBD
Quel joli astuce ce point !
-> 1, 2 et 4
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 select 1 from "c:\exe.db" where "13.04.2012" = CAST("13/04/2012" as DATE) union select 2 from "c:\exe.db" where "13.04.2012" = CAST("04/13/2012" as DATE) union select 3 from "c:\exe.db" where "01.04.2012" = CAST("01/04/2012" as DATE) union select 4 from "c:\exe.db" where "01.04.2012" = CAST("04/01/2012" as DATE)
3 étant mal converti avec /
C'était pour souligner que le Filter n'avait pas ce problème de conversion et qu'il restait bien sagement en Français![]()
C'était à ceci que je faisais référence, si tu avais corrigé de toi-même les (), ton message ne faisait pas avancer le Schmilblick !
Sinon pour finir, en utilisant ce code avec <=, as-tu le bon résultat ?
evidemment à toi de choisir entre Date_enregistrement et Date_arrive
si oui alors pense au bouton![]()
si non
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Query1.SQL.Clear(); Query1.SQL.Add('SELECT * FROM corps.DB'); Query1.SQL.Add('WHERE Active_Date_depart = :HaveDep'); Query1.SQL.Add('AND Date_arrive <= :FromDate)'); Query1.ParamByName('HaveDep').AsString := 'Non'; Query1.ParamByName('FromDate').AsDateTime := Date - 5; // IncDay c'est plus lisible ! non ? Query1.Open();
J'ai rajouté le format de date américain. Voir l'exemple ex106a.zip dans les précédent messages. Ne pas tenir compte de ex106.zip. la table de test se trouve dans l'exemple.
OK merci a tous pour votre patience
j'ai modifier légèrement le code il a l'air ok
merci encore une fois
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Query1.SQL.Clear(); Query1.SQL.Add('SELECT * FROM corps.DB'); Query1.SQL.Add('WHERE Active_Date_depart = :HaveDep'); Query1.SQL.Add('AND Date_arrive + 3 < (:FromDate)'); Query1.ParamByName('HaveDep').AsString := 'Non'; Query1.ParamByName('FromDate').AsDateTime := Date; // IncDay c'est plus lisible ! non ? Query1.Open();
tous ces messages pour ça![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager