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.
Was mach ich falsch ?
Gruß Ralf
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
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 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