Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Berechnungen von Zeiten MS ACCESS





Frage

Hallo Supporter! Ich habe 2 Tabellen, in der einen kommen Störungen mit Uhrzeit von und Uhrzeit bis rein. In der 2. Tabelle sind Pausenzeiten hinterlegt- Jetzt muss ich die Störungszeit, wenn sie mit der Pausenzeit kollidiert, dahin gehend berechnen, das die Minuten der Pausenzeit von der Störungszeit abgezogen werden. Da hackt es ein wenig bei mir, hat jemand ne brauchbare Idee? Gruß Ralf

Antwort 1 von RalfH

HAllo,
Ich habe jetzt folgeneden Code, leider bekomme ich die Fehlermeldung 6 Überlauf bei rss!dauer. Die Tabellen liegen auf einem SQL Server. dauer ist als Datetime definiert.
Sub StoerungDauer()


Dim rsp As DAO.Recordset
Dim rss As DAO.Recordset
Dim varTest As Variant

'Recordsets erstellen
Set rsp = CurrentDb.OpenRecordset("dbo_PZZ")
Set rss = CurrentDb.OpenRecordset("Störungsmeldungen Stammtabelle")

'Schleife durchläuft Störung-Recordset
Do While Not rss.EOF
    
  rss.Edit
    rss!dauer = Null
    rss.Update
    rsp.MoveFirst
    'Schleife durchläuft Pause-Recordset
    Do While Not rsp.EOF
        
        
        
        'Bedingung: Stoerung beginnt innerhalb der Pause
        If rss!StörungsZeitvon >= rsp!Von And rss!StörungsZeitvon <= rsp!bis Then
          rss.Edit
            'Bedingung: Ende der Störung vor Ende der Pause
            If rss!StörungZeitbis <= rsp!bis Then
                rss!dauer = 0
            Else
                rss!dauer = rss!StörungsZeitbis - rsp!bis
            End If
            rss.Update
            Exit Do
        End If
        
        'Bedingung: Stoerung endet innerhalb der Pause
        If rss!StörungZeitbis >= rsp!Von And rss!StörungZeitbis <= rsp!bis Then
            rss.Edit
            'Bedingung: Anfang der Störung nach Anfang der Pause
            If rss!StörungsZeitvon >= rsp!Von Then
                rss!dauer = 0
            Else
                rss!dauer = rsp!Von - rss!StörungZeitbis
            End If
           rss.Update
            Exit Do
        End If
        
        'Bedingung: Stoerung beginnt vor und endet nach der Pause
        If rss!StörungsZeitvon < rsp!Von And rss!StörungZeitbis > rsp!bis Then
            rss.Edit
                rss!dauer = (rss!StörungZeitbis - rss!StörungsZeitvon) - (rsp!bis - rsp!Von)
            rss.Update
            Exit Do
        End If
        
        rsp.MoveNext
    
        If rsp.EOF = True Then
            rss.Edit
            rss!dauer = rss!StörungZeitbis - rss!StörungsZeitvon
        End If
    
    Loop
    
    rss.MoveNext

Loop

End Sub


Was mach ich falsch ?
Gruß Ralf

Antwort 2 von lleopard

Hallo Ralf,

Grundsätzlich arbeiten SQL Server und Access nicht wirklich harmonisch miteinander....

insbesondere was Zeiten angeht!!!

Bedingungen wie:

If rss!StörungZeitbis >= rsp!Von

oder Berechnungen wie:

rss!dauer = rsp!Von - rss!StörungZeitbis

ist da ziemlich schnell ein Problem.

Besser ist es Zeiten in Sekunden umzurechnen, die Werte über Variablen, die das Format Long oä haben, zu berechnen und dann diese zu vergleichen...

dann sollte es klappen:

Gruß Leo

Antwort 3 von RalfH

Hallo Leo ,
Ich habe das ganze jetzt direkt auf dem Server realisiert mit einer Store Procedures. Da klappt das einwandfrei.
Trotzdem Danke für Deinen Hinweis.

P.S: Ab Sql Server 2008 soll das Datumsfeld getrennt von den Uhrzeiten werden ( Hoffentlich ;-)

Gruß Ralf

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: