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 :

ADOQuery : ajouter une différence de date comme condition


Sujet :

Delphi

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    529
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 529
    Points : 464
    Points
    464
    Par défaut ADOQuery : ajouter une différence de date comme condition
    bonjour,
    je souhaite créer une requête pour calculer l'expérience (nombre d'années) des agents
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    decodedate(now(),y,m,d);
    //y:=2016
    annee:=inputbox('Veuillez entrer l''anée ','Année  ','31/12/'+inttostr(y));
    with adoquery1 do
    begin
    close;
    sql.clear;
    sql.Add('SELECT perso.nompren, perso.nbrean,');
    sql.Add(' Int(('+annee+'-[dtentree])/365) AS IEPCDIC,');
    sql.add(' from perso;'); 
    prepared;
    open;
    end;
    sa me donne le résultat -95 au lieu de 22(ans)
    Merci
    Deux, n'apprendront pas; le timide et l'arrogant

  2. #2
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Avec quel SGBD tu travail ? Pourquoi ne pas le faire directement en SQL avec par exemple un DATEDIFF ?

    Un exemple pris de stackoverflow :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    CREATE FUNCTION [dbo].[fnCalAge] (@DiffFrom DATE, @DiffTo DATE) RETURNS INT
    AS
    BEGIN
        DECLARE @NumOfYears INT
        SET @NumOfYears = (SELECT 
                             DATEDIFF(YEAR, @DiffFrom, @DiffTo) + 
                             CASE 
                               WHEN MONTH(@DiffTo) < MONTH(@DiffFrom) THEN -1 
                               WHEN MONTH(@DiffTo) > MONTH(@DiffFrom) THEN 0 
                               ELSE 
                                 CASE WHEN DAY(@DiffTo) < DAY(@DiffFrom) THEN -1 ELSE 0 END 
                             END)
        IF @NumOfYears < 0
        BEGIN
            SET @NumOfYears = 0;
        END
     
        RETURN @NumOfYears;
    END

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    529
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 529
    Points : 464
    Points
    464
    Par défaut
    Bonsoir, je vous remercie retwas pour la réponse mais je l'ai résolu d'une autre façon. je n'utilise pas le sql.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    var annee:string;
    y,m,d:word;
     Date1, Date2 : TDateTime; 
      Diff : Extended; 
      Jour1, Mois1, Annee1 : Word; 
      Jour2, Mois2, Annee2 : Word;
    begin
    decodedate(now(),y,m,d);
    annee:=inputbox('Veuillez entrer l''anée ','Année  ','31/12/'+inttostr(y));
    Date1 := EncodeDate(y, M, d);
    Annee2:=strtoint(copy(annee,7,4));
     Mois2:=strtoint(copy(annee,4,2));
     Jour2:=strtoint(copy(annee,1,2));
      Date2 := EncodeDate(Annee2, Mois2, Jour2);
      Diff := Date2 - Date1;
      diff:=-1*diff;
     
    with dm.ADOQIEP do
    begin
    close;
    sql.Clear;
    sql.Add('SELECT perso.nompren, perso.nbrean,');
    sql.Add(' Int((Now()-'+floattostr(diff)+'-[dtentree])/365) AS IEPCDIC,');
    sql.Add(' perso.dtentree, perso.Num');
    sql.Add(' FROM perso');
    ...
    ça a donné le bon résultat .
    Merci.
    Deux, n'apprendront pas; le timide et l'arrogant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Affichage d'un etat avec une fonction ayant date comme parametre
    Par yupyupxav dans le forum IHM
    Réponses: 0
    Dernier message: 06/06/2009, 00h43
  2. date comme condition
    Par ka123tn dans le forum Requêtes
    Réponses: 5
    Dernier message: 01/04/2009, 14h14
  3. Réponses: 4
    Dernier message: 14/01/2007, 13h21
  4. [Code] LA date comme condition
    Par skreu dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 25/11/2005, 09h14
  5. Ajouter une année à la date en cours
    Par marie10 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/08/2005, 11h30

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