[Access] calculer des temps en seconde

Bonjour,

J'ai un problème avec access. J'ai une table LOGXITI qui contient des champs Date et Heure (au foramt 01010001 pour la date et 01:01:01 pour l'heure).

SESSION (Idsession, Nsession, datesession, codecat)
LOXITI(Nlog, ID, Date, Heure, Description)
Avec les relations suivantes
SESSION.Idession=LOGXITI.Idlog
Copie d'écran de la table SESSION
https://www.cjoint.com/?doliesaz6F

Je souhaite calculé la différence entre l'heure de fin de session et l'heure de début de session afin de connaitre le temps écoulé lors de chaque session.
Je dois pouvoir récupérer le premier tuple de la table LOGXITI et le dernier tuple, pour une chaque session (cf pj)

Comment je peux calculer cette différence entre les tuples ? Dois je traiter les heures en base 60 ? Est ce possible de transformer une heure en numérique (00:05:10 devient 310 puis on peux faire les soustraction facilement ?) ? Comment gérer les heures nouvelles entre 01:59:59 et 02:00:01 et pire entre 23:59:59 et 00:00:01 du jour suivant ?

Je ne sais pas trop comment faire ?

Merci d'avance

NB : mes champs heure et date sont definis en date/heure et numérique.
Configuration: Windows 2000
Firefox 2.0.0.2

13 réponses

  • Votes
  • Date
  • Date décroissante
  1. Mission complete

    merci, je vérifie que j'ai plus aucune question et je marque le formu en problème résolu

    Merci bcp
    1. Modérateur
      Salut,

      la fonction datediff fait ça très bien :

      a = datediff("s",datedeb,datefin)

      Il faut cependant concaténer ta date et ton heure puis la transfomer en format date...

      datedeb = cdate(date & " " & heurelog)...
      1. Bon, ça parait simple comme tu me le présente.

        mais j'ai pluisieurs problème :

        1.tu as du remarqué dans ma table que la date est au format AAAAMMJJ. Je n'arrive pas a faire un CDate la dessus.

        2. je ne vois pas où utiliser cette fonction ? dans une requete ?
        1. Modérateur
          1 - Le format n'est qu'un format d'affichage...

          Tu peux donc le remettre en French avec format...

          Un truc comme ça :

          a = datediff("s",cdate(format(datedeb,"jj/mm/aa") & " " & heurelog)),cdate(format(datefin,"jj/mm/aa") & " " & heurelog)))

          2 - Où tu veux !

          SELECT datediff("s",cdate(format(datedeb,"jj/mm/aa") & " " & heurelog)),cdate(format(datefin,"jj/mm/aa") & " " & heurelog))) FROM ...

          J'ai pas vériifé les parenthèses...

      2. j'arrive a rien, j'arrive toujours pas a faire ni le cdate, ni le diffdate

        Commençons par le Cdate
        je comprends pas pourquoi ça ne marche pas
        j'ai mis dans une requete un expr tel quel
        Date1: CDate(LOGXITI.[Date] & " " & LOGXITI.[Heurelog])

        en sql
        SELECT LOGXITI.Date, LOGXITI.Nlog, LOGXITI.Heurelog, CDate(LOGXITI.[Date] & " " & LOGXITI.[Heurelog]) AS Date1
        FROM LOGXITI;

        jai le doit a un jolie #Erreur dans le resultat de requete
        qu'est ce que tu en penses ?
        1. Modérateur
          Ben voui, mais date est une donnée 'date' ou 'chaine'...

          Si c'est date, ça devrait marcher, si c'est une chaine, il faut reformater (mid, left,right) pour mettre des / afin de retransformer en format date avec cdate...
          1. c'est au format 'numérique' enfin 'donnée mais pas date. je peu pa le mettre en date, il me dit probleme de conversion de format

            j'ai essayé de remmetre la date au format jj/mm/aaaa pour ensuite pouvoir cchanger de format, j'ai réussi a séparer aaaa de mm et de jj dans 3 champs d'une requete mais je sais pas comment recomposer au format jj/mm/aaaa ?
            j'ai tenté un truc comme Date
            1. ça y est, j'ai réussi le coup de mettre la date au format jj/mm/aaaa mais impossible de faire une requete de mise a jour de ma table pour remplacer la date aaaa/mm/jj

              maintenant, j'essaye de mettre cette nouvelle date au format jj/mm/aaaa dans table pour remplacer l'autre
              1. J'ai toujours pas réussi, mais je me rapproche ; j'ai réussi a mettre la date au format voulu 'date/heure'
                J'ai le requete sql suivante
                SELECT DateDiff("s",CDate(Format(SESSION.Date,"""jj""/mm/""aaaa""") & " " & LOGXITI.heurelog),CDate(Format(SESSION.Date,"""jj""/mm/""aaaa""") & " " & LOGXITI.heurelog)) AS DeltaT
                FROM [SESSION], LOGXITI;

                Mes champs heure et date sont au bon format mais il proviennent de différentes tables. Le resultat de la requete est #erreur. Pouvez vous m'aider ? merci
                1. J'ai essayé en prenant les champs date et ehurelog dans un meme table LOGXITI mais ça marche pas non plus ...
                  1. la requete marche, merci
                    premiere mission réussi

                    maintenant, je ne sais pas comment je vais pouvoir déterminer mes datedeb et datefin. Le resultat de la requete est le suivant:
                    https://www.cjoint.com/?dqlSL3bRLv

                    en sql
                    SELECT SESSION.Nsession, CDate(SESSION.[Date] & " " & [heurelog]) AS datedeb, CDate(SESSION.[Date] & " " & [heurelog]) AS datefin, LOGXITI.Nlog
                    FROM [SESSION] INNER JOIN LOGXITI ON SESSION.IDsession = LOGXITI.IDlog
                    GROUP BY SESSION.Nsession, CDate(SESSION.[Date] & " " & [heurelog]), CDate(SESSION.[Date] & " " & [heurelog]), LOGXITI.Nlog;

                    Je souhaite recuperer la premiere et derniere date pour une session. Autrement dit, je souhaite recuperer la datedeb (la premiere pour un Nsession) et la datefin (la derniere pour cette meme Nsession)

                    ex: pour la session Nsession=1, datedeb doit valoir la date du premier Nlog=769 et datefin du Nolg=771
                    Le nombre de Nlog par Nsession est variable
                    pour la session Nsession=18, datedeb doit valoir la date du premier Nlog=820 et datefin du Nolg=823
                    1. Modérateur
                      Tu fais une requête avec le prédicat TOP 1 qui te renvoie la première donnée... Il suffit de trier un coup en ascendant et un autre en descendant...

                      SELECT TOP 1 session FROM table WHERE NSESSION = 1 ORDER BY session... ou un truc du genre
                      1. Bonjour, j'ai un problème à résoudre,qui ai le suivent!
                        une classe de cm1 regarde un film donc le début et à 15h35 et la fin à 16h20
                        quel est la duré de se film!
                        pourriez-vous m'aider merci.