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

Bases de données Delphi Discussion :

Double arrondi sur un dataset


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Points : 69
    Points
    69
    Par défaut Double arrondi sur un dataset
    Bonjour,

    je n'ai pas trouvé de titre approprié, mais voilà le problème.

    J'ai un dataset qui me récupère les champs suivants:
    rayon, personne, date, activité, durée

    au final une seule chose m'intéresse, avoir le cumul de la durée par rayon

    SAUF que selon une règle établie (par personne), je veux arrondir soit la durée de mon activité, soit le cumul de la durée sur une journée pour une personne

    et pour l'instant je ne vois pas trop comment faire...

    merci de vos lumières

    Isa
    Isachat

  2. #2
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut


    je te suggère de déplacer (demande à un modo) ton sujet dans le forum delphi et bases de données car il me semble plus approprié.
    je pense que ton problème pourrait être résolu par une requete SQL, laquelle je ne sais pas.
    je pense (trop en fait) que selon la règle à établir (par personne) il se pourrait que tu ne puisses pas résoudre le problème avec une requete SQL, et dans ce cas tu devras parcourir ton dataset manuellement et implémenter un algorithme pour aboutir au résultat escompté

    bonne chance .

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    en fait dans ton cas il faut que tu passe par une operation intermediare

    la premiere etape est de remplir une table (temporaire si possible) avec la somme arrondi par personne
    et ensuite reprendre cet table afin de faire l'arrondi final
    donc on a

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into tmp(rayon, personne,durée)
    select  rayon, personne,Arrondi(sum(durée))
    from matable 
    group by rayon, personne
    et ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select  rayon, Arrondi(sum(durée))
    from tmp 
    group by rayon

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Points : 69
    Points
    69
    Par défaut
    Justement j'ai plus de souci avec l'algo à établir que la requête en elle-même car selon la règle définie au niveau de la personne, l'arrondi se fera sur la durée de l'activité ou sur la durée du total de la journée.
    ce qui veut dire qu'au sein de mon dataset je peux avoir des personnes dont la règle est arrondir la durée d'activité et d'autres dont la règle est arrondir la durée de la journée, sachant que par ailleurs une personnes peut avoir plusieurs activités par jour.

    Pour l'instant j'ai fait un truc assez complexe mais je ne trouve pas mieux. J'ai modifié ma requête pour qu'elle me récupère tous les champs dont j'ai besoin.
    J'enregistre le contenu du dataset dans une liste d'objets, j'en profite pour appliquer la règle d'arrondi si elle doit s'appliquer sur la durée d'activité.

    Je parcours une deuxième fois mon dataset et je cumule ma durée d'activité pour avoir la durée journalière et j'applique la règle d'arrondi sur la durée de la journée si besoin.

    Je me retrouve donc avec deux listes d'objets, une qui contient les infos avec arrondi par durée activité et l'autre qui contient les infos avec arrondi par durée journée, je compile ces deux listes en une seule en cumulant les valeurs.

    c'est pas super pratique mais je n'ai pas trouvé mieux.

    Isa
    Isachat

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    comment determine tu que l'arrondi se determine sur la journée ou sur l'activité ?

    si ce n'est pas un critere arbitraire tu pourra effectuer tous cela a l'aide de requete sql

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Points : 69
    Points
    69
    Par défaut
    Non, je ne peux pas effectuer cela par une simple requête sql (c'est pour ça que j'avais posté dans le forum delphi au départ)

    car
    1 : l'arrondi n'est pas un simple round mais un arrondi aux x minutes supérieures ou inférieures

    2 : chaque personne peut avoir une règle d'arrondi différente (par durée activité ou par durée journée) cette règle est défini par personne.

    à bientôt,

    Isa
    Isachat

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    tu peut tres bien le faire par requette
    la seul question est comment sais ton que ce soit par activite ou par duree

    tu me repond que c'est par personne
    il te suffit donc de creer une table temporaire commune
    est pour chaque type de personne tu applique la regle qui s'impose ce n'est pas plus dur que cela

    ca ira beaucoup plus vite que de faire tes boucle sur tes enregistrement

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Points : 69
    Points
    69
    Par défaut
    Je ne pense pas pouvoir le faire par requête, mais j'ai eu une autre idée:

    j'ajoute à ma table des horaires un champ durée arrondi et un champ booléen appliquer arrondi.

    Je crée une fonction qui applique les règles d'arrondi par personne (et par date j'ai oublié de préciser)
    si c'est un arrondi par durée d'activité, aucun pb, je stocke ma durée arrondi dans l'enregistrement
    si c'est un arrondi par total journée, je peux par ex stocker ma durée arrondie de la journée dans la dernière activité de la journée
    Je crée une autre fonction qui appelle la fonction précédente pour toutes mes personnes.

    dans ma requête qui récupère les données pour l'édition, je rajoute juste une clause "case when" pour récupérer la durée arrondie à la place de la durée calculée par fin d'activité - début d'activité (si appliquer la règle = vrai)

    ce qui est sûrement plus simple que de parcourir mille fois mes enregistrements

    qu'en pensez-vous ?

    Isa
    Isachat

Discussions similaires

  1. problème d'arrondi sur un Double
    Par Gordon Freeman dans le forum Général Java
    Réponses: 2
    Dernier message: 23/06/2010, 10h35
  2. [Math]Problème troncage ou arrondi sur des valeurs
    Par Carrel dans le forum Général Java
    Réponses: 6
    Dernier message: 07/10/2009, 15h11
  3. [C++] faire un arrondi sur un double
    Par pavlacki dans le forum C++
    Réponses: 6
    Dernier message: 13/11/2005, 16h50
  4. comment autoriser le double clic sur un champ desactivé ?
    Par linou dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/04/2005, 17h23
  5. [langage] Erreur d'arrondi sur petits nombres
    Par Tchetch dans le forum Langage
    Réponses: 7
    Dernier message: 12/01/2005, 10h11

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