Announcement

Collapse
No announcement yet.

Zeit berechnen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zeit berechnen

    Ich muss in einer Abfrage Zeiten berechnen genauer gesagt Sendezeiten.

    In der Summe gibt das oft mehr als 24 Stunden. in diesem Fall gibt mir MS-Access bei Formatieirung von als Zeit immer einen Datumswert an wobei sich das Datum vom 31.12.1899 aus betrachtet der soundsovielte Tag ist wie sich aus Stundensumme, Minutensumme, und Sekundensumme ergibt. Also wenn für Stunde der Wert 72 für Minute 3400 und für sekunde 500 steht, bekomme ich den 4.1.1900 08:48:20 was ich jedoch brächte wäre eine Anzeig von 106:48:20.

    Gibt es eine Möglichkeit das irgendwie herauszurechnen?

    Vielen Danke wieder im vorraus.

    Winzlieb

  • #2
    Zusatz

    Es liegen auch die Anzahl der Sekunden vot... z.B: 1263521. Es wäre natürlich auch eine möglichkeit sich hier rauszurechnen wieviele Stunden, Minuten und Sekunden das wären und das dann darzustellen. Leider schaffe ich es nicht eine geeigenete Funktion auszuprogrammieren.

    Hat jemand denn so etwas nicht schon mal gemacht?

    nochmals vielen Dank im vorraus.

    lg.

    Winzlieb

    Comment


    • #3
      Ein Versuch

      Habe auf donkarl.com folgenden Lösungsansatz für mein Problem gefunden und bin so vorgegangen.

      Für eine Zeitsumme (nach einer Idee von Uwe Weineck)
      Setze folgende Funktion in ein VBA-Modul:

      Function fctTimeSum(ByVal lngHour As Long, _
      ByVal lngMin As Long, ByVal lngSec As Long) As String

      fctTimeSum = Format$(lngHour + (lngMin + lngSec \ 60) \ 60, "00") _
      & ":" & Format$((lngMin + lngSec \ 60) Mod 60, "00") _
      & ":" & Format$(lngSec Mod 60, "00")

      End Function

      Aufruf z.B. im Steuerelement eines Textfeldes (alles in einer Zeile):
      =fctTimeSum(Summe(Stunde(Gesamtzeit));Summe(Minute (Gesamtzeit));Summe(Sekunde(Gesamtzeit)))


      Baue ich das jetzt in eine Abfrage in einem Zeilfeld ein so Liefert mir Access "undefinierte Fuktion in Abfrage zurück" und kann die Abrfrage nicht mehr ausführen. Das selbe in einem Textfeld eines Berichtes hat zur Folge dass ein Parametereingabefenster auf geht mit anzeige eine Feldes fncTimesum und unabhängig von der Eingbe im Popupfeld gibt das Feld einen Fehler aus ....

      ich bin mir sicher dass das jetzt nur eine Lächerkichkeit ist. Aber ich stehe wieder mal an.

      Sollte es eine Lösung geben... bitte dringend.

      Danke im Vorraus


      lg.


      Winzlieb

      Comment


      • #4
        Hallo Winzlieb,

        das kursive ist ein Zitat, keine Beschreibung was Du gemacht hast?
        Hattest Du die Function in einem VB Modul hinterlegt oder im Formular-Code?

        Grundsätzlich kann man VB Funktionen an allen Ecken & Kanten verwenden, sogar direkt in SQL.
        Voraussetzungen:
        - Muss sich in einem Modul befinden (nicht in Formularen oder Berichten)
        - Muss als PUBLIC deklariert sein
        - Muss eine Skalar-Funktion sein, die nur Native-Datentyp zurückliefert, keine Objekte.

        Beim Verwenden muss man nur auf die dusslige Differenzierung von Komma und Semikolon achten.

        Beim meinem Test mit einemm Beispiel hat es problemlos geklappt.

        [highlight=VB]Option Compare Database
        Option Explicit

        Public Function gsFormatDateDiff(ByVal dtStart As Date, ByVal dtEnd As Date) As String
        Dim cDiff As Double, ihour As Integer, iMinutes As Integer, iSeconds As Integer

        'Zunächst die Differenz in Stunden mit Nachkommastellen errrechnen
        cDiff = DateDiff("s", dtStart, dtEnd) / 3600#
        ihour = Fix(cDiff)
        iMinutes = Fix(60 * (cDiff - ihour))
        iSeconds = Round(60 * (60 * (cDiff - ihour) - iMinutes))
        'und das formatiert zurückliefern: Ganzzahlige Stunden beliebiger Länge und Rest wie bei Uhrzeit üblich
        gsFormatDateDiff = ihour & ":" & Format(iMinutes, "00") & ":" & Format(iSeconds, "00")
        End Function
        [/highlight]

        Abfrage dann mit Daten aus einer Tabelle:
        [highlight=CODE]SELECT DateDiff.Start, DateDiff.Ende, gsFormatDateDiff([Start], [Ende]) AS Diff
        FROM DateDiff;[/highlight]
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment

        Working...
        X