Rechnen mit Zeiten in Access

Hallo liebe Access Experten, bin leider noch Anfänger und hoffe auf eure Hilfe: Ich möchte meine Arbeitszeiten mit Access berechnen

Habe in Tabelle Anfangszeit, Unterbrechung, Wiederaufnahme, Ende und Zeitsaldo erstellt.Alle Zeiten sind auch als DATUM/ZEIT definiert.

Berechnet habe ich mein tägl. Zeitsaldo in der Tabellenbefehlszeile folgend:
Zeitsaldo:smiley:atDiff(„n“;[Anfangszeit];[Unterbrechung])/60 +DatDiff(„n“;[Wiederaufnahme];[Ende])/60. Soweit sogut. Das Ergebnis wird leider immer als Dezimalzahl dargestellt z.B. 2,5. Ich möchte aber die Darstellung als Zeitformat 02:30 erreichen und auch später mit diesem Format weiterrechnen. Wer kann mir für diese Formatumwandlung den nötigen Befehl/Weg aufzeigen?? Danke für jede erdenkliche Hilfe !!!mojof

Hallo mojof,

bin leider noch Anfänger und hoffe auf eure Hilfe: Ich möchte meine Arbeitszeiten mit Access berechnen

welches Access?

Das Ergebnis wird leider immer als Dezimalzahl dargestellt

wo?

Ich möchte aber die Darstellung als Zeitformat 02:30
erreichen und auch später mit diesem Format weiterrechnen.

du hast dir soeben die Antwort selbst gegeben: Format

Wer kann mir für diese Formatumwandlung den nötigen Befehl/Weg
aufzeigen??

ich

Danke Netwolf, das Format wurde angenommen, aber leider stimmt das Ergebnis nun nicht mehr.
AZeit war: 08:30
UZeit war: 12:00
WZeit war: 13:30
EZeit war: 15:30
Dezimal zeigte das Ergebnis 5,5 Stunden, nach Änderung der Formates in
Zeit, 24h erscheint immer das Ergebnis 12:00.
Habe alle Formateingaben geprüft, kann da leider keinen Fehler erkennen.
Sorry bitte nochmal um Hilfe !!
molof

Hallo molof

hier mal das Beispiel aus der Hilfe von Access:
(kann man finden mit -> F1 -> Zeit berechnen)

Function ElapsedTime(endTime As Date, startTime As Date)
Dim strOutput As String
Dim Interval As Date

’ Calculate the time interval.
Interval = endTime - startTime

’ Format and print the time interval in seconds.
strOutput = Int(CSng(Interval * 24 * 3600)) & " Seconds"
Debug.Print strOutput

’ Format and print the time interval in minutes and seconds.
strOutput = Int(CSng(Interval * 24 * 60)) & „:“ & Format(Interval, „ss“) _
& " Minutes:Seconds"
Debug.Print strOutput

’ Format and print the time interval in hours, minutes and seconds.
strOutput = Int(CSng(Interval * 24)) & „:“ & Format(Interval, „nn:ss“) _
& " Hours:Minutes:Seconds"
Debug.Print strOutput

’ Format and print the time interval in days, hours, minutes and seconds.
strOutput = Int(CSng(Interval)) & " days " & Format(Interval, „hh“) _
& " Hours " & Format(Interval, „nn“) & " Minutes " & _
Format(Interval, „ss“) & " Seconds"
Debug.Print strOutput

End Function

hth

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo,

etwa so:

Zeitsaldo: Format((DatDiff(„n“;[Anfangszeit];[Unterbrechung]) +DatDiff(„n“;[Wiederaufnahme];[Ende]))/1440;„hh:mm“)

Viele Grüße vom Bodensee
Franz, DF6GL

PS: Feedback erwünscht!

Ich bin happy, das hat geklappt. Genauso hatte ich das erhofft!
Vielen herzlichen Dank
molof

Ich habe viel gelernt, herzlichen Dank! Ihre Lösung übersteigt aber
meine derzeitigen begrenzten Kenntnisse, dass ich mich an den Code schon heranwage. Ich sollte vielleicht meine eigenen Ansprüche noch
begrenzter halten. Aber trotzdem haben Sie mir sehr geholfen!
Danke ! molof

Hallo DF6GL,
Sorry, es hat sich eine Frage nun neu ergeben:
Kann ich mit den einzelnen Ergebnissen des Zeitsaldos weiterrechnen?
Ich benötige „nur“ die Zeitsalden für jeweils immer den gleichen Tag.
Beispiel:

  1. Arbeitsschritt am Tag / Zeitsaldo von Anfang bis Ende = 02:30 h
  2. Arbeitsschritt an Tag / Zeitsaldo von Anfang bis Ende = 03:00 h
  3. Arbeitsschritt an Tag / Zeitsaldo von Anfang bis Ende = 01:50 h
    Das ergäbe 07:20 h Gesamtdauer für diesen Tag. Habe versucht eine Abfrage zu erstellen,welche die einzelnen Zeitsalden mit Funktion Summe
    addiert: Fehlermeldung = Datentyp in Kriterienausdruck unverträglich.
    Gibt es da eine „relativ“ einfache Hilfe?
    Grüße
    Jürgen, molof

Hallo,

das wird etwas schwieriger…

Select tblTabelle.ArbeitsschrittDatum, Sum(((DateDiff(„n“,[Anfangszeit],[Unterbrechung])+DateDiff(„n“,[Wiederaufnahme],[Ende]))/1440)) as s, Format([s],„hh:mm“) as y from tblTabelle Group by tblTabelle.ArbeitsschrittDatum

Aber Vorsicht: das Zeitformat kann nur max. 23:59 darstellen.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Guten Morgen an den Bodensee …

etwas schwierig ist gut! Danke herzlich für die Mühe!!!
Das Zeitformat bis 23:59 ist nicht kritisch, mein benötigtes Zeitfenster bewegt sich in dieser DB max. zwischen 06:00 und 21:00 Uhr.

Habe versucht den gesamten Befehl in eine neue Auswahlabfrage zur Summenbildung der Tagessalden zu kopieren. Das war wohl der falsche Weg. Wenn ich die Auswahlabfrage starte, erscheint die Fehlermeldung:
„Die Unterabfrage in diesem Ausdruck hat eine fehlerhafte Syntax.Prüfen Sie die Syntax der Unterabfrage, und setzten Sie die Unterabfrage in Klammern“ Habe nochmals alle Datenfelder auf formale Gleichheit geprüft und auch meine Tabelle in der die Felder hinterlegt sind in „ArbeitsschrittDatum“ umbenannt und alles auch in die ersten Abfrage kopiert,leider immer wieder mit der gleichen Fehlermeldung. Gibt es noch Rettung für mein Vorhaben???
Grüße aus der Eifel
Jürgen molof

Hallo,

der gesamte String muß unter Abfrageentwurf/Ansicht/SQL-Ansicht einkopiert und angepßt werden.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo aus der Eifel,

habe lange gebraucht die Formel anzupassen, weil mir die Bedeutung von tbl.TabelleArbeitsschritt anfangs überhaupt nicht klar war (Anfängerfehler?!?!). Aber der Ehrgeiz hatte mich gepackt. Ihre nachstehende Formel habe ich in die SQL Anzeige eingegeben,
Select tblTabelle.ArbeitsschrittDatum, Sum(((DateDiff(„n“,[Anfangszeit],[Unterbrechung])+DateDiff(„n“,[Wiederaufnahme],[Ende]))/1440)) as s, Format([s],„hh:mm“) as y from tblTabelle Group by tblTabelle.ArbeitsschrittDatum

und dann solange „umgebaut“ bis ich nach etlichen Fehlermeldungen das richtige Ergebnis mit folgendem String erzielen konnte. Jubel!!

SELECT ArbeitsschrittDatum, Sum(((DateDiff(„n“,[Anfangszeit],[Unterbrechung])+DateDiff(„n“,[Wiederaufnahme],[Ende]))/1440)) AS s, Format([s],„hh:mm“) AS Tagessaldo
FROM ArbeitsschrittDatum
GROUP BY ArbeitsschrittDatum;
(ArbeitsschrittDatum habe ich meine Grundtabelle genannt)
Das Ergebnis habe ich mit unterschiedlichen Änderungen der Zeiten überprüft, war jedesmal richtig. Allerdings erscheint bei Start der Abfrage immer ein Fenster : „Parameterwert eingeben: ArbeitsschrittDatum“. Eine Eingabe ist aber nicht notwendig.Das richtige Ergebnis wird trotzdem geliefert.Daraufhin habe ich alle Varianten ohne die Tabellenbezeichnung „ArbeitsschrittDatum“ im String ausprobiert…leider ohne Erfolg. Kann man das noch abstellen?

Sie haben mir bereits so klasse geholfen und ich habe durch Sie viel gelernt, dafür schon einmal meinen herzlichen Dank. Deshalb traue ich mich bald gar nicht, Sie um eine weitere Hilfestellung zusätzlich zu der Parameterwertabfrage zu bitten: Die obige Formel sollte eigentlich dazu dienen, alle, auch unterschiedliche, Arbeitsschritte tagesweise zu addieren, lässt sich das Datum noch einbauen? Sorry, dass ich das jetzt erst sage, hatte gehofft, dass ich das über die Gruppierungsfunktion in der Abfrage selber hinbekomme, funktioniert aber leider nicht. z.B.
Datum…Arbeitsschritt… Zeitsaldo… Tagessaldo
01.06.09…AS 1…02:00
01.06.09…AS 2…03:00…05:00
02.06.09…AS 1…01:00
02.06.09…AS 3…03:30…04:30
Die Art der Arbeitsschritte ist nicht von Bedeutung.
Der Zeitsaldo war schon vorher durch die vier Zeitfelder definiert.
Vielen Dank für die bisherige Unterstützung!!!
Viele Grüße aus der Eifel
j. molof

Hallo,

sorry, sehe erst Heute die zusätzliche Frage:

SELECT ArbeitsschrittDatum, Sum(((DateDiff(„n“,[Anfangszeit],[Unterbrechung])+DateDiff(„n“,[Wiederaufnahme],[Ende]))/1440)) AS s, Format([s],„hh:mm“) AS Tagessaldo
FROM ArbeitsschrittDatum
GROUP BY ArbeitsschrittDatum;

vermutlich gibt es das Feld „ArbeitsschrittDatum“ nicht in der (gleichlautetenden) Tabelle.

Also ganz einfach weglassen, oder den richtigen Feldnamen einsetzen.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo nochmals an den schönen Bodensee,

danke nochmals für die Hilfe, Abfragen und Ergebnisse funktionieren jetzt einwandfrei. Habe noch eine Frage zur Funktionalität der Felder
im Formular: Mein Formular „Zeiteingabe“ sollte eigentlich die Felder
‚Anfangszeit‘
‚Unterbrechung‘
‚Wiederaufnahme‘
‚Ende‘
‚Zeitsaldo‘ (Saldo der o.g. Datenfelder)sowie
‚Tagessaldo‘ (Saldo der Zeitsalden gleicher Tage)enthalten,
so dass bei Eingabe der Zeiten direkt der Zeit- und Tagessaldo zusehen
sind. Über die Zusammenlegung der jeweiligen Abfragen ist das auch kein Problem, allerdings kann ich dann im Endergebnis als Formular die einzelnen Zeitangaben im Formular nicht mehr eingeben bzw.ändern.Ist mir mit meinem jetzigen Wissenstand aber auch klar warum. Deshalb habe ich die Abfrage des jeweilgen Tagessaldos über eine Schaltfläche unter Eingabe des jeweilgen Datums[Kriterium in der Abfrage]und Zuordnung als Makro hinterlegt.Funktioniert,perfekt wäre es eben, wenn alle aktuellen Salden als Kombinationsfeld im Formular anzeigbar wären und die Arbeitszeiten trotzdem eingabefähig und änderbar wären.

Mir wäre schon mit einem Stichwort geholfen, unter dem ich diese
„Funktion“ nachlesen könnte.

Grüße aus der Eifel
J.mojof