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 :

Recherche sur un intervalle de dates


Sujet :

Delphi

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Recherche sur un intervalle de dates
    Rebonjour les amis,
    Toujours dans le cadre de mon application de gestion de stock, je fais une recherche pour savoir les pertes que j’ai eu sur une période donnée. J’ai donc mis en place un formulaire sur lequel j’ai mis deux composant date et un bouton. L’idée est que dans le premier composant je sélectionne la date de début et dans le second la date de fin. Au clic sur le bouton rechercher une requête SQL s'exécute dont voici le contenu :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select nom_categ,nom_article, sum(P.qté_article) as qtétotale ,sum(-1*P.qté_article*prix_achat_unitaire) as montant ,prix_achat_unitaire
    from ARTICLE A, PERTES P,CATEGORIE C
    where P.num_article = A.num_article and A.num_categ = C.num_categ  AND :p21 <= P.date_perte <= :p22
    group by nom_categ , nom_article,prix_achat_unitaire
    NB: P21 et p22 sont des params auquels jai affectés les date selectionnées

    Mon désespoir est que kan je sélectionne un intervalle hors des dates qui sont dans la table, il m’affiche toujours les données, ce qui ne devrait pas être le cas.
    Veuillez m'aider, svp..

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 683
    Points : 13 092
    Points
    13 092
    Par défaut
    WHERE P.date_perte BETWEEN :p21 AND :p22

    Après, il peut y avoir d'autres problèmes de jointure.

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    certes je l'ai remis comme demandé mais ce que j'observe c'est que la recherche se fait sur la valeur de la date même (cest-à-dire quand on sélectionne du 01/09/2017 au 05/09/2017) il affichera les données. Or, les données sont sur la date du 04/10/2017 et tout simplement parce que 04 est dans l'intervalle de 01 à 05. il ne tient plus compte du mois et de l'année.

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 667
    Points : 5 235
    Points
    5 235
    Par défaut
    De quel type est ta colonne "PERTES.date_perte" ?
    Le comportement que tu décris fait penser à celui qu'on aurait si cette colonne était de type "chaine" au lieu d'être de type "date"

  5. #5
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 901
    Points : 6 026
    Points
    6 026
    Par défaut
    Comment sont alimentés :p21 et :p22 ?
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  6. #6
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut
    bonjour

    voulez vous essayer ce code:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select nom_categ,nom_article, sum(P.qté_article) as qtétotale ,sum(-1*P.qté_article*prix_achat_unitaire) as montant ,prix_achat_unitaire
    from PERTES P
    inner join ARTICLE A on (P.num_article = A.num_article)
    inner join CATEGORIE C on (A.num_categ = C.num_categ)
    where  P.date_perte>=:p21 and  P.date_perte<= :p22
    group by nom_categ , nom_article,prix_achat_unitaire

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 118
    Points : 89
    Points
    89
    Par défaut
    bonjour,

    si le champ date_perte est de type caractère tu peut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    WHERE (CAST((SUBSTRING ( date_perte FROM 7 FOR 4 )||'+QuotedStr('/')+'||SUBSTRING ( date_perte 4 FOR 2 )||'+QuotedStr('/')+'||SUBSTRING ( date_perte FROM 1 FOR 2 )) AS DATE)
    BETWEEN '+QuotedStr(formatDateTime('mm/dd/yyyy',JvDateEdit1.date))+' AND '+QuotedStr(formatDateTime('mm/dd/yyyy',JvDateEdit2.date))+')
    ...

  8. #8
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    @fthdz Quelle régression ! les autres intervenant s'évertuent (mais pas trop) à indiquer qu'il est mieux d'utiliser une requête paramétrée et vous remettez une couche de concaténations ! Quant au traitement de la date (le CAST) quel indice vous permet de fournir cette solution ? si la date est fournie comme une chaine cela dépend peut être aussi des Settings du poste de travail !

    tant que l'on aura pas des indications sur le SGBD et la structure de la table (type de colonne de date_perte) aucune solution précise ne pourra être fournie
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 118
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    @fthdz Quelle régression ! les autres intervenant s'évertuent (mais pas trop) à indiquer qu'il est mieux d'utiliser une requête paramétrée et vous remettez une couche de concaténations ! Quant au traitement de la date (le CAST) quel indice vous permet de fournir cette solution ? si la date est fournie comme une chaine cela dépend peut être aussi des Settings du poste de travail !

    tant que l'on aura pas des indications sur le SGBD et la structure de la table (type de colonne de date_perte) aucune solution précise ne pourra être fournie
    c'est vrai il fallait pas intervenir sans indication (SGBD , type colonne date_perte) ,merci

Discussions similaires

  1. recherche sur des dates
    Par ingui dans le forum Access
    Réponses: 2
    Dernier message: 07/03/2007, 18h37
  2. [Dates] Recherche sur un agenda
    Par Msieurduss dans le forum Langage
    Réponses: 4
    Dernier message: 08/09/2006, 10h49
  3. probleme avec des filtres de recherche sur des dates
    Par MCarole dans le forum Access
    Réponses: 2
    Dernier message: 24/07/2006, 10h22
  4. [débutant] recherche sur dates en VBA
    Par tojiji dans le forum Access
    Réponses: 4
    Dernier message: 10/07/2006, 11h51
  5. Recherche sur des dates
    Par jroy dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 09/02/2006, 08h27

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