Avatar billede -anders- Juniormester
30. oktober 2007 - 11:03 Der er 10 kommentarer og
1 løsning

Beregning af tidsforbrug i en forspørgsel (access 2003)

Hej eksperter

Lad det være sagt med det samme, jeg kan ikke finde ud af at regne med dato/klokkesletsværdier :o).

Altså, jeg har en forspørgsel,i denne er der 2 felter fra min tabel "frakl" tilkl". Felterne  er af datatypen Dato/Klokkeslet, formatet er kort klokkesletsformat.

Jeg vil gerne i et beregnet felt i forspørgslen kunne beregne forskellen i timer og minutter på baggrund af værdierne i felterne frakl, og tilkl feks. 19:30-23:45 skulle så returnere 04:15. i det beregnet felt. Det skal også kunne regne hvis "tilkl" er over midnat feks. 19:30-00:30 skulle så returnere 05:00.

Er dette muligt og i så fald nogen der kan hjælpe :o)

Hilsen Anders.
Avatar billede terry Ekspert
30. oktober 2007 - 12:15 #1
Hi Anders
You will need to make a function to do this for you and then call the function with the two datetime values which then returns what you want.
An obvious problem when trying to calculate elapsed time is how to return the result. If the elapsed time is > 24hours then you cant return a value as a time 25:01 for example because a time cant be more than 24:00 (actually 00:00).

Here is a link which can return what you want but in text format. Maybe you can see how it works and alter it to your requirement. If you cant

http://www.accessmvp.com/djsteele/Diff2Dates.html
Avatar billede -anders- Juniormester
30. oktober 2007 - 12:33 #2
Hej terry, tak for indlægget, jeg har kikket på dit link, men er bange for at jeg ikke helt forstår koden sådan grundlæggende. Jeg har faktisk prøvet med nedenstående i et beregnet felt i forspørgslen, og den virker, men ikke hvis "Tilkl" er 00:00 eller derover:

Udtryk1: DateDiff("h";[frakl];[tilkl]) & ":" & DateDiff("n";[frakl];[Tilkl]) Mod 60
Avatar billede terry Ekspert
30. oktober 2007 - 14:42 #3
Smart idea using Mod :o)
I would have thought that as long as the date fields contains a date then it should work.

I've just tested in the debug window with this and it works as you can see from the result

?DateDiff("h",#2007-10-29 12:00#,#2007-10-30 13:15#) & ":" & DateDiff("n",#2007-10-30 12:00#,#2007-10-30 13:15#) Mod 60
25:15
Avatar billede -anders- Juniormester
30. oktober 2007 - 18:33 #4
Okay, du har ret i at det virker i dit sidste indlæg, men metoden virker ikke når jeg reff. til felterne "frakl" "tilkl". Jeg har forsøgt at bruge VBA i stedet, jeg har tilføjet et felt i min tabel "tbljob" felter hedder AntalTimer, feltet er af datatypen DatoKlokkeslet, og formatet er kort klokkesletsformat.

Jeg indsætter så dette felt på min form og forsøger så med nedenstående koden via klik på en knap:

Me!AntalTimer = DateDiff("h", [Frakl], [Tilkl]) & ":" & DateDiff("n", [Frakl], [Tilkl]) Mod 60

Dette virker fint, men i samme øjeblik jeg indtaster et klokkeslet i feltet "tilkl" som er 00:00 eller større fejler det "den indtastede værdi passer ikke til dette felt"

Det er vigtigt at resulatet kan gemmes i det korrekte format da jeg senere skal udregne total antal timer og minutter for et givent antal poster. Nogen ideer :o)

Hilsen Anders.
Avatar billede -anders- Juniormester
30. oktober 2007 - 18:34 #5
Måske noget med DateAdd i stedet ??
Avatar billede terry Ekspert
30. oktober 2007 - 18:43 #6
If the example works then I suspect the problem is in the data. Is it possible to see your dB or maybe just the table and query?

ekspertenATsanthell.dk
AT = @

"Det er vigtigt at resulatet kan gemmes i det korrekte format ..."

You cant save something like 25:15 as a datetime value so you can try saving it in a decimal field where 25 is the whole number and 15 is the decimals
Avatar billede -anders- Juniormester
30. oktober 2007 - 18:55 #7
Hej terry

Har lige sendt et lille eks til dig
Avatar billede -anders- Juniormester
30. oktober 2007 - 19:02 #8
I mellemtiden vil gerne forsøge at redegøre for anvendelse/design af db.

DB skal anvendes til at køre historik på spillejob for en musiker. Ideen er at musiker indtaster en Jobdato, samt fra og til klokken.

Når man syntes skal man kunne køre en rapport på en valgfri periode. Rapporten skal så vises antal job for den valgte periode, samt det total antal timer der er forbrugt på disse job. Der skal til meget mere feks. pris/gennemsnitpris pr. job i perioden etc.

men basis er at man kan beregne tidsforbrug. Disse spillejob afsluttes typisk efter midnat, men starter aldrig efter midnat.
Avatar billede terry Ekspert
30. oktober 2007 - 20:03 #9
svar :o)
Avatar billede -anders- Juniormester
30. oktober 2007 - 20:07 #10
Okay her er så løsningen fra terry, som virker fremragende, man opretter et modul og indsætter nedenstående kode

Function TimeDiffStr(frakl As Date, tilkl As Date) As String
Dim startDT As Date
Dim endDT As Date


    startDT = Date + frakl
   
    If tilkl < frakl Then
        endDT = Date + 1 + tilkl
    Else
        endDT = Date + tilkl
       
    End If

    TimeDiffStr = DateDiff("h", [startDT], [endDT]) & ":" & DateDiff("n", [startDT], [endDT]) Mod 60

End Function

I et beregnet felt i en forspørgsel kalder man så funktion på denne måde:

Udtryk1: TimeDiffStr([Frakl];[Tilkl])

Mange tak til terry for en elegant løsning :)
Avatar billede egyl Nybegynder
31. marts 2011 - 13:03 #11
Blev glad da jeg fandt denne men den sviger lidt
frakl    tilkl    timer
22:30    02:00    4:30 (1 time for meget)
17:00    04:15    11:15
07:15    15:00    8:45 (1 time for meget)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester