[AccessD] Problem: subtotaling time (long email)

Gustav Brock gustav at cactus.dk
Fri Nov 14 11:51:36 CST 2003


Hi Bob

Use DateDiff("n", datStart, datStop) to calculate the time difference
in minutes (assuming you are ignoring seconds). Sum those minutes as
your subtotal. 

Then you can use a function like this to calculate a pseudo time:

<code>

Function TimeHour(ByVal curHMS As Currency) As Date

' Rounds and converts curHMS (number of hours as decimalnumber).
' Returns a time value, hh:nn:ss.
' Gustav Brock, Cactus Data ApS.
' 1999-08-12.

  Dim lngH As Long
  Dim lngM As Long
  Dim lngS As Long
  Dim curR As Currency
  
  ' No error handling needed.
  On Error Resume Next
  
  ' Round to two decimals, and skip number of days if curHMS > 24.
  ' If day count is needed, omit modulus like this:
  ' curHMS = (CLng(curHMS * 10000) / 100 * 36) ' Mod 86400
  curHMS = (CLng(curHMS * 10000) / 100 * 36) Mod 86400
  
  ' Calculate hours, minutes, and seconds.
  lngH = Int(curHMS / 3600)
  curR = curHMS - (lngH * 3600)
  lngM = Int(curR / 60)
  curR = curR - (lngM * 60)
  lngS = CInt(curR)
  
  ' Create time value.
  TimeHour = TimeSerial(lngH, lngM, lngS)

End Function

</code>

Finally, format the returned date/time value as you like, say:

  strTimeDiff = Format(datTimeDiff, "hh:nn")

or simply specify this format for the textbox in the report.

/gustav


> I cannot figure out how to add time.

> I have a database that tracks responses for emergency services providers.

> Table and report details are below. I'm trying to create a report showing
> each provider's responses, sorted and subtotaled by major class types and
> then minor class types, with the time of each incident shown AND subtotaled.
> I have no problem with the report EXCEPT that I cannot subtotal the time
> (the "Time = " and "Total Time = " fields).

> I suspect that the problem may be that I am using a formatted field
> (TimeDiff), and cannot add the data because they are now string values. If
> anyone can help steer me in a better direction, I would be extremely
> grateful!

> TIA,

> Bob Gajewski

> *************************************************************
> DATABASE DETAILS:

> tblEmployees
>         EmployeeID (PK)
>         EmployeeName

> tblMajorClass
>         MajorClassID (PK)
>         MajorClassName

> tblMinorClass
>         MinorClassID (PK)
>         MinorClassName

> tblIncidents
>         IncidentID (PK)
>         MajorClassID (FK)
>                 (has "Call" or "Drill")
>         MinorClassID (FK)
>                 (for "Call", has "Fire" or "EMS")
>                 (for "Drill", has "Internal" or "External")
>         DispatchTime
>         InServiceTime

> tblResponses
>         ResponseID (PK)
>         IncidentID (FK)
>         EmployeeID (FK)

> The report (rptEmployeeResponse) has the following:

>         Sorting & Grouping:
>                 EmployeeName (Ascending)
>                         Group Header = Yes
>                         Group Footer = Yes
>                         Group On = Each Value
>                 MajorClassName (Ascending)
>                         Group Header = Yes
>                         Group Footer = Yes
>                         Group On = Each Value
>                 MinorClassName (Ascending)
>                         Group Header = Yes
>                         Group Footer = Yes
>                         Group On = Each Value
>                 IncidentID
>                         Group Header = No
>                         Group Footer = No
>                         Group On = Each Value

>         SQL Statement (QBE)
>                 EmployeeName (GroupBy)
>                 MajorClass (GroupBy)
>                 MinorClass (GroupBy)
>                 IncidentID (Count) - from tblResponses!
>                 DispatchTime (GroupBy)
>                 InServiceTime (GroupBy)
>                 TimeDiff (GroupBy)
>                         TimeDiff:
IIf([InServiceTime]>>[DispatchTime],Format([InServiceTime]-[DispatchTime]),"S
> hort Time"),Format(DateAdd("d",1,[InServiceTime])-[DispatchTime]),"Short
> Time"))

>         Sample Output:


> Brown, Joe
>         Calls
>                 EMS
>                         001     11:00   13:59   2:59
>                         003     09:13   10:29   1:16
>                 Count = 2               Time = 4:15

>                 Fire
>                         002     23:04   01:41   2:37
>                         004     11:42   12:02   0:20
>                         005     04:30   05:58   1:28
>                 Count = 3               Time = 4:25

>         Total Count = 5 Total Time = 8:40


>         Drills
>                 External
>                         001     11:00   12:00   1:00
>                         003     09:00   10:30   1:30
>                 Count = 2               Time = 2:30

>                 EMS
>                         002     19:00   21:30   2:30
>                         004     11:00   12:00   1:00
>                         005     09:30   11:00   1:30
>                 Count = 3               Time = 5:00

>         Total Count = 5 Total Time = 7:30

> {Next Employee ....}

> Counts and times are only totaled per employee; there is no aggregate grand
> total.



More information about the AccessD mailing list