IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

affiche les enregistrements de plus de 5 jours


Sujet :

Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut affiche les enregistrements de plus de 5 jours
    re re bonjour j'ai besoin pour un petit programme d'afficher les enregistrements qui ont plus de 5 jours
    J ai fais une requête mais sans résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Query1.SQL.Clear;
    Query1.SQL.Add('select * from table.DB');
    Query1.SQL.Add ('WHERE (Date_enregistrement)>(Now()-5)');
    Query1.Open;
    merci de votre aide

  2. #2
    Membre éclairé
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Points : 664
    Points
    664
    Par défaut
    Dans le genre... côté Delphi...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    uses System.SysUtils, System.DateUtils;
     
    FormatDateTime('yyyy-mm-dd', IncDay(Now, -5))
    Après sans la structure de la table, la plateforme de la base de données... on ne peut pas spécialement t'aider plus...

  3. #3
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par tarmo57 Voir le message
    re re bonjour j'ai besoin pour un petit programme d'afficher les enregistrements qui ont plus de 5 jours
    J ai fais une requête mais sans résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Query1.SQL.Clear;
    Query1.SQL.Add('select * from table.DB');
    Query1.SQL.Add ('WHERE (Date_enregistrement)>(Now()-5)');
    Query1.Open;
    D'une part, précisez le SGBD (bien que le nom de la table me laisse fortement penser à Paradox) et la structure des colonnes impliquées dans la requête, cela permettra d'obtenir une réponse plus pertinente...
    D'autre part, la condition ne me semble pas en adéquation avec les conditions de votre problème : actuellement, je dirais que vous récupérez les lignes dont "l'age" est strictement inférieur à 5 jours.
    --
    Philippe.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut desole
    désolé, je vous donne plus de détails je suis sur une table paradox et un champs date

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 092
    Points
    41 092
    Billets dans le blog
    62
    Par défaut
    pas mal , mais avec un paramètre cela serait encore mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Query1.SQL.Clear;
    Query1.SQL.Add('select * from table.DB');
    Query1.SQL.Add ('WHERE Date_enregistrement<=:FromDate)');
    Query1.ParamByName('FromDate').asDateTime:=IncDay(Date,-5);
    Query1.Open;
    Avantage majeur , pas besoin de s'occuper du format SGBD de la date
    mineur mais non moindre utilisation de la fonction delphi pour la gestion des dates (unité dateutils)

    P.S. je ne sais pas a quelle version apparait la fonction incday Delphi3 ne la connait pas , Delphi7 si (mes versions 4 et 5 ont été désinstallées depuis longtemps).

    C'est aussi pour ça qu'il est important d'indiquer quelle version de Delphi est utilisée

  6. #6
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Entièrement d'accord pour l'utilisation de requêtes paramétrées plutôt que construites en direct. Cela évite une possible injection SQL et permet des optimisations pour les moteurs de bases de données dignes de ce nom...
    Citation Envoyé par SergioMaster Voir le message
    P.S. je ne sais pas a quelle version apparait la fonction incday Delphi3 ne la connait pas , Delphi7 si (mes versions 4 et 5 ont été désinstallées depuis longtemps).
    Dans le cas d'une ancienne version de delphi qui n'aurait pas cette fonction, on peut contourner cette limitation en s'appuyant sur les caractéristique du type TDateTime qui est lui même du type Double (cf.aide).
    La partie entière d'une valeur TDateTime de Delphi représente le nombre de jours écoulés depuis le 30/12/1899.La partie fractionnaire de la valeur TDateTime est la partie des 24 heures écoulée.
    Sachant cela, on peut remplacer directement la fonction IncDay(Date, -5) par Date - 5
    --
    Philippe.

  7. #7
    Membre éclairé
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Points : 664
    Points
    664
    Par défaut
    Citation Envoyé par Ph. B. Voir le message
    Dans le cas d'une ancienne version de delphi qui n'aurait pas cette fonction, on peut contourner cette limitation en s'appuyant sur les caractéristique du type TDateTime qui est lui même du type Double (cf.aide).

    Sachant cela, on peut remplacer directement la fonction IncDay(Date, -5) par Date - 5
    http://docwiki.embarcadero.com/VCL/fr/System.TDateTime

    En plus, le calcul sera optimisé en faisant une simple soustraction... (IncDay entraîne l'appel de 4 fonctions...)

  8. #8
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 503
    Points : 2 773
    Points
    2 773
    Billets dans le blog
    10
    Par défaut
    Essaie quelque chose dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    St1 := ''''+DateToStr (now)+'''' ;
    Query1.SQL.Clear;
    Query1.SQL.Add('select * from table.DB');
    Query1.SQL.Add ('WHERE (Date_enregistrement)>('+st1+'()-5)');
    Query1.Open;

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut merci
    Citation Envoyé par ALWEBER Voir le message
    Essaie quelque chose dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    St1 := ''''+DateToStr (now)+'''' ;
    Query1.SQL.Clear;
    Query1.SQL.Add('select * from table.DB');
    Query1.SQL.Add ('WHERE (Date_enregistrement)>('+st1+'()-5)');
    Query1.Open;
    Merci ALWEBER
    j'ai fais des tests modifier un peu, mais j'ais toujours une erreur ,je ne comprend pas pourquoi
    mon code

    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;)
    et l'erreur

    utilisation incorrecte du mot clé Elément: ()-5)
    merci par avance de votre aide

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 560
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 560
    Points : 25 153
    Points
    25 153
    Par défaut
    Si l'on regarde la requête générée par ce code 'WHERE (Date_enregistrement)>('+st1+'()-5)',
    on obtient WHERE (Date_enregistrement) > ('02/04/2012'()-5) .
    Trop de Parenthèses, tue la parenthèse !

    Sinon la soustraction d'une Date (en format chaine) directement en Paradox

    Il faut commencer par des exemples simples

    select "02/04/2012" - 5 FROM corps.DB => 30/01/2012 !
    Oh ! format Américain sur mon Paradox 7 de BCB6 FR sur un OS Français !

    Pourquoi ne pas utiliser la proposition de SergioMaster avec ParamByName, c'est la méthode la plus fiable qui permet d'éviter les '''' et ou les '"' ou encore QuotedStr

    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();

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 092
    Points
    41 092
    Billets dans le blog
    62
    Par défaut
    c'est bien la peine de noter les réponses + ou -
    et d'expliquer pourquoi les paramètres c'est mieux
    ça ne rentre pas

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut formidable
    ouha super grand merci a tous. Enfin la requête fonctionne nickel .
    Le probleme est resolu

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut ok
    Citation Envoyé par SergioMaster Voir le message
    c'est bien la peine de noter les réponses + ou -
    et d'expliquer pourquoi les paramètres c'est mieux
    ça ne rentre pas

    tu as raison de faire la remarque SergioMaster
    je te présente toutes mes excuses.
    J'était tellement perdu dans mes codes que tu m'as donner la réponse sous le nez ,je n'ai pas fait assez attention.

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut la pouasse
    J'ai fais des tests la requête fonctionne super mais je n'est pas le résultat voulu
    je dois afficher tous les enregistrements qui ont plus de 5 jours d'enregistrements dans la base de donnée. La date de départ est Date_arrive après 5 jours et plus je les affichent dans un DBGrid.
    j'ai modifier dans tous les sens ,et rien n'a fonctionner .
    une idée ?

  15. #15
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 751
    Points : 13 332
    Points
    13 332
    Par défaut
    Citation Envoyé par tarmo57 Voir le message
    J'ai fais des tests la requête fonctionne super mais je n'est pas le résultat voulu
    DCFQ... ... QDCF...

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut SAlut
    Citation Envoyé par Andnotor Voir le message
    DCFQ... ... QDCF...
    SAlut Andnotor que veux dire DCFQ

  17. #17
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 751
    Points : 13 332
    Points
    13 332
    Par défaut
    DCQF ?..

  18. #18
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 092
    Points
    41 092
    Billets dans le blog
    62
    Par défaut
    et si ... on avait une Description des champs de la table , le code de la requête et/ou le code Delphi
    J'ai fais des tests la requête fonctionne super mais je n'est pas le résultat voulu
    et le résultat vraiment voulu
    Au fil et à mesure de la discussion des champs nouveaux apparaissent
    i.e : le champ HaveDep
    de plus n'aurais pas tu oublié de parler de l'ordre de tri ? (ORDER BY)

  19. #19
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 289
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 289
    Points : 1 940
    Points
    1 940
    Par défaut
    Littéralement:
    La requête affiche les enregistrements datant d'après aujourd'hui - cinq jours, dont ceux des cinq derniers jours.

    Donc à peu de chose près l'inverse de ce que tu veux.

  20. #20
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 092
    Points
    41 092
    Billets dans le blog
    62
    Par défaut
    La requête indiquée dans mon premier Post (#5) demandais bien les enregistrements ayant 5 jours ou plus
    Query1.SQL.Add ('WHERE Date_enregistrement<=:FromDate)');
    encore une fois comment un signe <= n'a pas été correctement recopié restera un mystère

    juste pour enfoncé le clou au maillet en rajoutant un ordre par date décroissante
    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 table.DB');
    Query1.SQL.Add ('WHERE Date_enregistrement<=:FromDate)');
    Query1.SQL.Add ('ORDER BY date_enregistrement desc');
    Query1.ParamByName('FromDate').asDateTime:=IncDay(Date,-5);
    Query1.Open;

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/12/2013, 18h59
  2. [MySQL] Afficher les enregistrements de moins de (x) jours.
    Par weelson@mac.com dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 19/02/2007, 18h31
  3. [MySQL] afficher les enregistrements apres 24h
    Par arti2004 dans le forum Requêtes
    Réponses: 1
    Dernier message: 11/06/2006, 15h16
  4. Recuperer les enregistrements present plus de x fois
    Par rikewir dans le forum Requêtes
    Réponses: 5
    Dernier message: 05/04/2006, 16h05
  5. Afficher les enregistrements si le count() vaut 0
    Par j14z dans le forum Requêtes
    Réponses: 7
    Dernier message: 06/04/2004, 09h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo