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

Access Discussion :

heure avec centieme de seconde dans un etat


Sujet :

Access

  1. #1
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 018
    Points
    2 018
    Par défaut heure avec centieme de seconde dans un etat
    Bonjour,

    je travaille sur un systeme de chronometrage pour mon club d'aviron et je butte sur les centièmes de seconde, comme apparement d'autres l'ont fait avant moi
    http://www.developpez.net/forums/vie...ntieme+seconde

    Je vais enregistrer dans mes tables des temps sous forme de double (ca m'arrange puisque c'est ce que j'ai comme donnée à enregistrer via boitier electronique)

    Le truc c'est que j'utilise access uniquement pour les bases et pour éditer des états. Je ne fais pas le moindre code en VB (je suis pas tres fan...)

    : Comment puis je ecrire en toute lettre mes temps au centieme de seconde dans l'etat à partir de mes valeurs entières ?

    J'ai essayé de cuisiner des calculs dans l'etat avec l'outil access mais je m'en sort pas, je ne sais meme pas si c'est possible en passant par là en fait...

    Merci par avance pour vos conseils
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 24
    Points : 29
    Points
    29
    Par défaut
    peut tu nous donner une de tes saisie et un exemple de resultat desiré
    a+

  3. #3
    Faw
    Faw est déconnecté
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    1 169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 169
    Points : 1 383
    Points
    1 383
    Par défaut
    Salut, essaye de mettre dans la propriété Masque de saisie
    Je ne comprends rien à Access...Mais je me soigne.
    Moteur de recherche
    DAO

  4. #4
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 018
    Points
    2 018
    Par défaut
    bonjour et merci pour votre aide.

    J'enregistre dans une table des heures de départ et des heures d'arrivée dans deux champs différents sous forme de double = heure * 360000 + minute *6000+secondes *100 + centieme
    je dispose de ces informations pour chaque participant de chaque course.

    Je souhaite éditer un état de chaque course avec le temps de chaque participant.

    Le temps du participant est donné par la différence des deux heures de départ et d'arrivée.
    Ca je sais faire mais j'obtiens un numérique, lui aussi correspondant à heure * 360000 + minute *6000+secondes *100 + centieme, comme mes heures de depart et arrivée que j'ai enregistrée dans la table !

    Mon soucis est donc de faire apparaitre ce temps calculé (27212 par ex) sous forme de texte dans un format du style 4min32,12 ou 4:32.12 ou tout autre format "humain".
    Je n'arrive pas à afficher ainsi sous forme de texte (je suppose qu'il faut afficher sous forme de texte...)

    Merci encore
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  5. #5
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 018
    Points
    2 018
    Par défaut
    j'ai trouvé une astuce pour faire trés vilainement ce que je veux

    au lieu de caluler le contenu d'une zone de texte dans mon état, je calcule le contenu de 4 zones de texte...

    La première est calculée ainsi
    =Ent(([HeureArrivee]-[HeureDepart])/360000)
    je place ensuite a coté une etiquette "h"
    puis la seconde est donné par la formule pour les minutes suivi d'une etiquette "min" puis pareil pour les secondes et les centièmes...
    toutes ces formules sont saisies dans le générateur d'expression de access.

    Ca marche mais c'est d'une fiabilité tres moyenne à mes yeux et ce n'est vraiment pas tres élegant.. et trés lourd pour la mise en page.

    Je vous serai tres reconaissant de m'expliquer comment calculer en une seule fois le texte à afficher dans une et une seule zone de texte.

    Merci par avance
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  6. #6
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    voici une solution qui utilise la fonction GetTickCount
    Cette fonction renvoie le nombre de millisecondes qui s'est écoulé depuis le démarrage du système.
    (Faq de Romain Puyfoulhoux : rendons à César ...)

    Pour tester j'ai créé un formulaire avec 2 boutons bt_deb (début) et bt_fin (fin du chronométrage) et je présente le résultat formaté dans un champ Text chp1

    La ligne "Private Declare Function ... " est à déclarer dans un module public
    Aussi, gDEb et gFin sont déclarées en var globales mais c'est pas nécessaire

    Voici le code de mon formulaire

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    Option Compare Database
    Option Explicit
     
    'Private Declare Function GetTickCount Lib "kernel32" () As LongGetTickCount
     
    'Auteur:  Romain Puyfoulhoux
    'Renvoie le nombre de millisecondes qui s'est écoulé depuis le démarrage du système.
     
    Private Sub bt_deb_Click()
        gDeb = 0
        MsgBox "gdeb: " & gDeb
        gDeb = GetTickCount() 'ici le code à chronométrer
     
    End Sub
     
    Private Sub bt_fin_Click()
    Dim lHrs As Long, lMin As Long, lSec As Long, lCent As Long
    Dim lReste As Long
     
        gFin = GetTickCount() 'ici le code à chronométrer
     
        MsgBox "Temps mis en millisecondes : " & gFin - gDeb
     
        'Affichage formaté
        '*******************
        lHrs = Int((gFin - gDeb) / 3600000)
        lReste = (gFin - gDeb) - (lHrs * 3600000)
        lMin = Int(lReste / 60000)
        lReste = lReste - (lMin * 60000)
        lSec = Int(lReste / 1000)
        lReste = lReste - (lSec * 1000)
        lCent = Int(lReste / 10)
     
        Me.chp1 = CStr(lHrs) & "H " & Format(CStr(lMin), "00") & "mn" _
                & Format(CStr(lSec), "00") & ":" & Format(CStr(lCent), "00")
     
    End Sub
    Et voila,
    "Always look at the bright side of life." Monty Python.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 24
    Points : 29
    Points
    29
    Par défaut
    dans une requete 2 champs

    champ1:monchamp ' valeur de reference
    champ2:calcTp(monchamp)

    dans un module la fonction suivante

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Public Function calcTp(t)
     
    Dim h As Double, m As Double, s As Double, c As Double
    'variable pour heures minutes secondes centiemes
    Dim txt As String
    'variable pour recuperer le resultat
    Dim cpt As String
    ' cpt variable pour la mise en forme detecte la presence h et min mais aff tjs sec et centiemes
    cpt = 0
    'extrait les heures h
        h = Int(t / 360000)
        If h > 0 Then cpt = 4
     'retire les heures au temps total
        t = t - (h * 360000)
     'extrait les minutes m
        m = Int(t / 6000)
         If m > 0 And h = 0 Then cpt = 3
     'retire les minutes au temps restant
        t = t - (m * 6000)
         If cpt = 0 Then cpt = 2
       'extrait les secondes s
        s = Int(t / 100)
        'retire les secondes au temps restant
        t = t - (s * 100)
        'il reste les centiemes c
        c = t
    ' mise en forme du texte
    Select Case cpt
    Case 4
    txt = Str(h) & " h " & Str(m) & " min " & Str(s) & " sec " & Str(c) & " centiemes"
    Case 3
    txt = Str(m) & " min " & Str(s) & " sec " & Str(c) & " centiemes"
    Case 2
    txt = Str(s) & " sec " & Str(c) & " centiemes"
    'calttp = Str(h) & Str(m) & Str(s) & Str(c)
    End Select
    calcTp = txt
    End Function

    tu essaye et me tiend au courrant
    a+

    modération : cafeine,

  8. #8
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 018
    Points
    2 018
    Par défaut
    micniv, je ne me base pas sur les milliseconeds du pc mais sur un temps donné par un boitier electronique. Je ne peux pas faire confiance à windows pour avoir des temps precis et par ailleur, je ne veux pas que l'on touche au pc (à ses touches) et surtout les top ne sont pas des appuis sur des touches mais des cellules photo...


    exit 26 je veux bien essayer ce code mais je suis bien ennuyé par le fait que je ne vois pas du tout ou le mettre !

    Quel evenement, quels module quel quoi dois je utiliser pour ce faire ?

    je vais dejà tenter d'utiliser ces synthaxes la dans l'expression de la valeur de la zone de texte...

    Merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 24
    Points : 29
    Points
    29
    Par défaut
    dans ta base tu va dans module nouveau
    tu copie la fonction les lignes precede de ' ne sont pas necessaire elle serve de commentaire


    tu me dis ou tu effectue ton calcul pur obtenir le 27212 par exfonction , form, ou requete
    et je t'explique la suite
    pour appellé la fonction depuis un form ou une requete
    on pourrrait meme lié ton calcul dans une premiere partie de la fonction si ça t'interesse

  10. #10
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 018
    Points
    2 018
    Par défaut
    J'ecris le 27212 dans un champ d'une table via un logiciel developpé en Borland C++ Builder....

    Apres, j'ai dans access des etats qui font appel à cette table pour afficher les temps.
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 24
    Points : 29
    Points
    29
    Par défaut
    puisque le champ est dans une table 2 possibilité

    1 creer une requete avec tout les champs necessaire a l'etat et basé l'etat sur la requete

    dans la requete tu rajoute un champ que tu appalle affichetemps par exemple
    affichetemps :calcTp(nom du champ dans la table qui contient la valeur)

    dans l'etat descendre le champ affichetemps dans la section correspondante ou il doit etre affiché, c'est un champ comme un autre

    soit directement dans l'etat en mode création

    toujours dans la section ou tu veux voir apparaitre l'affichage
    tu cree un champ txt independant dans propriétés, données, source controle du champ crée tu tape
    =calcTp([nom du controle qui contient ta valeur a transformer])

    voila le tour est joué
    a+

  12. #12
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 018
    Points
    2 018
    Par défaut
    ok,
    donc j'ecris cet appel de fonction là ou je mettais mes calculs jusque là

    et la fonction je l'ecris et la declare dans un module en faisant qq part (faut que je trouve) nouveau module ?

    J'essaie de ce pas (en le faisant direct dans l'etat, ca me parait plus simple)

    Merci beaucoup
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 24
    Points : 29
    Points
    29
    Par défaut
    dans la fenetre base de données ou tu a la liste des tables tu a aussi formulaire, requete macro ET aussi module
    courrage le meilleurs et au bout

  14. #14
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 018
    Points
    2 018
    Par défaut
    ca a l'air de faire ce qu'il faut ! super
    en tous cas j'ai l'endroit ou mettre la fonction et le minimum de synthaxe nécessaire à le faire exactement comme je veux, merci mille fois !!!

    par contre ya un truc que je comprends pas :
    si je crée une zone de texte et que je mets =calcTp([HeureArrivée]) ca marche

    mais si j'ecris exactement la même chose dans les propriétés d'une zone de texte crée par défaut par access à partir de la valeur de la table ca ne marche pas. Ca me met une erreur 440 "erreur automation" qui bloque sur la ligne h = Int(t / 360000)

    Je ne comprends pas trop car les propriété des deux zone de textes (celle créée par defaut et la mienne ont manifestement le meme paramétrage...


    Merci encore
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 24
    Points : 29
    Points
    29
    Par défaut
    normal
    la table contient une valeur et la fonction n'ai pas un formatage mais un calcul different a partir de la valeur de la table

  16. #16
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 018
    Points
    2 018
    Par défaut
    je ne comprends pas...

    Si j'ecris =calcTp([HeureDepart]) dans la propriété source control d'une zone de texte ajoutée par moi ca marche

    si je fais la meme chose dans une zone de texte créée en auto par access à la création de l'etat (qui contient donc au depart HeureDepart , sans rien d'autre) ca plante

    qu'est ce que cette zone de texte créée par access a de différent ?, je ne la vois pas dans la liste de toutes les propriétés ; Si je mets tout pareil ca plante quand meme avec la zone de texte créée par access

    c'est surement normal mais je comprends vraiment pas pourquoi
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 24
    Points : 29
    Points
    29
    Par défaut
    le champ creer par access est lié au champ de la table
    le champ independant n'est pas lié a la table , il recupere cela valeur de la table avant de faire le calcul l'envoi au module et recupere la valeur formaté
    regarde bien chaque ligne de l'onglet données des 2 champ

  18. #18
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 018
    Points
    2 018
    Par défaut
    Ben justement dans l'onglet données

    j'ai 4 lignes

    Source control : HeureArrivee dans le cas du treuc créé par acces et =calcTp([HeureArrivee]) dans mon cas.

    Masque de saisie : rien dans les deux cas

    Cumul : Non dans les deux cas

    Balises actives : Rien dans les deux cas


    si je mets la meme chose (ce que je veux) dans Source controle. Ca marche pour celui que j'ai créé ca plante pour l'autre...Je vois pas de différences moi
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

Discussions similaires

  1. Souci avec format de date dans mon etat mensuel
    Par Yamina62 dans le forum IHM
    Réponses: 1
    Dernier message: 02/10/2013, 16h54
  2. Récupération de l'heure avec une résolution de la dixième de seconde
    Par Info_76 dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 23/08/2007, 13h52
  3. champs calculer avec condition dans un etat
    Par scons dans le forum IHM
    Réponses: 2
    Dernier message: 16/12/2006, 19h58
  4. [TPW] Incrémentation avec un vrai centième de seconde !
    Par biomanred dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 14/02/2006, 14h55
  5. [CR] incrementer avec count dans deux etat lieés
    Par souad26 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 08/11/2004, 17h18

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