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

Requêtes et SQL. Discussion :

Gestion des durées dans les tables Access


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 103
    Points : 57
    Points
    57
    Par défaut Gestion des durées dans les tables Access
    Bonjour
    Voila ma question est trés simple
    Access peut il gerer les heures supérieur a 24h ?
    Car lorsqu'un champs est spécifié comme DATE/HEURE si une valeur supérieur à 24:00:00 est entrée on a une erreur.
    J'ai besoin de faire des cumul d'heure donc dois-je passer par un autre moyen ?

    Merci à vous

  2. #2
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Je ne suis qu'un humble modérateur et non un expert d'Access, mais je dirais qu'il vaudrait mieux stocker tes durées sous forme de Long correspondant à des minutes, heures ou encore secondes, etc. (à toi de voir quelle unité te convient le mieux).

    Ensuite si tu veux additionner ou soustraire ces durées à des dates, tu utiliseras la fonction DateAdd / AjDate.

    Pour l'affichage de tes durées dans un format 00:00, je ne sais que te conseiller. J'imagine qu'il faudra ruser un peu mais tout dépent de tes besoins précis.

    Autant tu t'en sortiras en définissant un simple format, autant il te faudra convertir ta valeur en string, recourir à une fonction personnalisée... tout dépend...
    (\ _ /)
    (='.'=)
    (")-(")

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 103
    Points : 57
    Points
    57
    Par défaut
    Oui c'est ce que je me suis dit mais je trouve tout de meme térrifiant que qu'Access après plusieurs version ne sache pas faire :
    24:00:00 + 12:00:00 = 36:00:00
    C'est un minimum a quoi bon faire des fonctions compliqué et que personne n'utilise si ce genre de choses basique n'est pas suporté ...

  4. #4
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Hum... terrifiant je ne sais pas...

    Et si Date et durée était des concepts liés mais néanmoins bien distincts. Peut-être alors qu'Access n'aurait pas si tort de ne pas les confondre, non ?

    tu ne peux pas reprocher à Access de ne pas afficher des durées là il est censé afficher des dates.

    Par contre peut-être qu'il faudrait implémenter un type de champ Durée ??
    (\ _ /)
    (='.'=)
    (")-(")

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 103
    Points : 57
    Points
    57
    Par défaut
    Il est vrai que la date et la durée son 2 choses bien distinct, mais ce type de données dans acces te propose plusieurs formats :
    DATE COMPLET
    DATE Réduit
    HEURE COMPLET
    Heure REDUIT
    ...

    Sur les dates je suis d'accord, mais si tu decide d'afficher des heures simplement pourquoi ne peut-il pas gérer plus de 24h ?
    Et il est vrai qu'un type durée supplémentaire permettrait de toute évidence de palier à cela.
    Car passé par un type float pour ensuite reconvertir en durée j'appel ça du bricolage pour une application qui se veut simple et complète ... moyen

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 168
    Points : 196
    Points
    196
    Par défaut
    Heureusement qu' access ne permette pas se genre de manipulation de date car il ne pourrait plus assurer la moitie des trois quart des methodes associees aux date : imagine un isdate("36:00:00") = true ou false ??
    Et puis le plus logique serait 24:00:00 + 12:00:00 = 12:00:00 mais c est mon point de vue. Faut passer par des variables non typees date..
    ++
    Sur terre il y a 10 types de personnes, celles qui comprennent le binaire et les autres...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 103
    Points : 57
    Points
    57
    Par défaut
    Il manque donc bien un type durée

  8. #8
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Slt,

    acces te propose plusieurs formats
    ce sont bien des formats, pas des types de données : donc le stockage est identique, seul l'affichage change

    Car passé par un type float pour ensuite reconvertir en durée j'appel ça du bricolage
    ben c'est comme ça que sont stocké les champs Date/Heure...

    24:00:00 = 1
    12:00:00 = 0.5

    24:00:00 + 12:00:00 = 1.5

    1.5 * 24 = 36

    on retrouve les 36h non?

  9. #9
    Membre éclairé Avatar de ft035580
    Profil pro
    Inscrit en
    Août 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 689
    Points : 799
    Points
    799

  10. #10
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Si je ne m'abuse une durée est une quantité de temps (en X fraction)

    Une quantité s'exprime avec un nombre non ? C'est donc un numérique qu'il faut utiliser.

    Et il est vrai qu'un type durée supplémentaire permettrait de toute évidence de palier à cela.
    Si on part ainsi, on demande au fabricant du produit de tout coder à la place du développeur. Dans ce cas, pourquoi pas un champ de type Jour (Lundi, mardi, etc ...) Plus sérieusement, si ça s'appelle du développement d'application, c'est pas pour rien

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 103
    Points : 57
    Points
    57
    Par défaut
    Il est vrai que l'on peut devellopé nos application et faire
    1.5*24 = 36h

    Mais à ce moment la on pourré également crée nos table en mode console avec des CREATE TABLE .....

    Il y a bien des truc sous acces pour inserer des calendriers, des lecteurs multimedia ... pourquoi pas une gestion de durée ?

    Enfin bon

  12. #12
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Mais à ce moment la on pourré également crée nos table en mode console avec des CREATE TABLE .....
    +1


    Moi je suis d'accord pour dire qu'une durée n'est qu'un sipmle numérique et ne peut pas justifier la création d'un type de champ. D'autant plus que je vois mal comment on pourrait spécifier l'unité sans que ce choix nous soit imposé de façon arbitraire.
    Donc s'il faillait un champ type minute, Heure, mois, jour, nanosecondes, etc., on aurait pas fini (quoique à ce stade on finirait par les avoir ces champs Lundi, Mardi... ).

    Le seul truc que je regrette, c'est qu'on ne puisse pas gérer facilement la propriété format pour afficher des durées.

    Il faut faire sa propre fonction et donc passer par du String. C'est le seul vrai inconvient à mon sens.
    (\ _ /)
    (='.'=)
    (")-(")

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 103
    Points : 57
    Points
    57
    Par défaut
    Donc s'il faillait un champ type minute, Heure, mois, jour, nanosecondes, etc., on aurait pas fini
    Débat d'opinion j'aime bien ca, peut etre que je changerai d'avis avec l'experience

    Sur ce bonne journée à tous et a bientot dans d'autre sujet

    Ps : il est quel heure la ? 08:33 ? ou 0.34...*24 ?

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 103
    Points : 57
    Points
    57
    Par défaut
    A votre avis :

    Maintenant que mes heures sont stocké comme réel simple.
    Est il possible d'afficher de manière formater cette durée lors de l'affichage via une requete SQL :
    L'affichage se fait grace à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    SELECT T_UTILISATEUR.U_Chrono, T_UTILISATEUR.Groupe, T_GAZ.Nom, T_TOTAL.Total_duree ...
    Si je fait T_TOTAL.Total_duree * 24 dans la requete
    j'obtiens bien 36 pour 1.5 mais par exemple avec 0.98 j'ai 23.52

    Est-il possible de formater tout ca en gardant une selection SQL ou y a t'il encore quelque planche et quelque clou rouillé à mettre pour obtenir quelque chose de convenable ?

    Ps : je ne suis pas hostile à microsoft ( heu juste un peu )

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 127
    Points : 61
    Points
    61
    Par défaut
    J'ai eu le mm pb et j'ai resolu de la facon suivante :

    Creation d'une fonction :

    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
     
    Public Function EnHeure(ParTemps As Double, Optional ParSecondesAffichees As Boolean = False)
    ' Permet de trouver un nombre d'heures > 24 :
     
      Dim VarJours As Long
      Dim VarHeures As Long
      Dim VarMinutes As Long
      Dim VarSecondes As Long
     
      VarJours = Int(ParTemps)
      ParTemps = (ParTemps - VarJours) * 86400 'nombre de secondes
     
      VarSecondes = ParTemps Mod 60
      ParTemps = ParTemps - VarSecondes
     
      VarMinutes = (ParTemps Mod 3600) / 60 ' Minutes
      ParTemps = ParTemps - VarMinutes * 60
     
      VarHeures = (ParTemps Mod 86400) / 3600 ' Heures
      VarHeures = VarHeures + VarJours * 24
     
      If IsMissing(ParSecondesAffichees) Or ParSecondesAffichees = True Then
        EnHeure = VarHeures & ":" & Format(VarMinutes, "00") & ":" & Format(VarSecondes, "00")
      Else
        EnHeure = VarHeures & ":" & Format(VarMinutes, "00")
      End If
    End Function
    et ensuite j'ai utilisé cette fonctione dans ma requette SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT EnHeure(Sum([taxes].[duree]), True) AS Total_Temp, Sum([taxes].[Montant]) AS SommeDeMontant, Count([taxes].[Tel]) AS CompteDeTel FROM [taxes];
    Tu peux aussi l'utiliser dans un champ texte pour faire une somme

    Voila j'espere que ca reponds facilement a ta demande

    Anax

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 103
    Points : 57
    Points
    57
    Par défaut
    Merci à toi
    Mais je ne comprend pas tout
    Qu'est-ce que ParTemps ?

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 127
    Points : 61
    Points
    61
    Par défaut
    c est une variable qui va servir a calculer les temps.
    Copie simplement cette fonction et utilise la comme indiqué dans la requette SQL que j ai collé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    SELECT EnHeure(Sum([taxes].[duree]), True) AS Total_Temp, 
    Sum([taxes].[Montant]) AS SommeDeMontant, 
    Count([taxes].[Tel]) AS CompteDeTel FROM [taxes];
    Dis moi si cela fonctionne en utilisant la fonction que je viens de te donner

    Anax

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 103
    Points : 57
    Points
    57
    Par défaut
    j'ai finalement opté pour la méthode pur et dur lol

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INT([Total_duree]*24) AS Heures ,INT((([Total_duree]*24)-INT(([Total_duree]*24)))*60) As Minutes

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/02/2015, 15h20
  2. Gestion des contraintes dans les applications Access
    Par Tofalu dans le forum Sondages et Débats
    Réponses: 5
    Dernier message: 22/05/2014, 03h14
  3. Réponses: 1
    Dernier message: 10/06/2010, 08h03
  4. Gestion des NULL dans les tables externes
    Par plouf2244 dans le forum Firebird
    Réponses: 1
    Dernier message: 23/03/2006, 16h55
  5. Inserer des données dans une table access SQL
    Par ouellet5 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 23/11/2005, 21h11

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