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
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
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
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:
Arbeitsschritt am Tag / Zeitsaldo von Anfang bis Ende = 02:30 h
Arbeitsschritt an Tag / Zeitsaldo von Anfang bis Ende = 03:00 h
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
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.
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
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
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.
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.