New user
Beiträge: 3
| Hallo Karl,
danke für Deine hartnäckige Nachfrage. :-)
Karl Donaubauer - 16.03.16 14:28
Bist du 100%ig sicher, dass er mit FindFirst den von dir erwarteten DS gefunden hat?
Prüfe das mal absolut sicher, also z.B. mit NoMatch und der Ausgabe eines eindeutigen Feldwertes:
Das Problem saß mal wieder vor dem PC.
Tatsächlich habe ich im Code die StartZEIT abgefragt und nicht das StartDATUM.
ZUFÄLLIG passte das beim ersten Datensatz mit dem erwarteten Wert, aber eben nicht mehr beim zweiten DS.
Habe den Code geändert. Jetzt passt es.
Danke für die Hilfe
Gruß
Friedhelm
So geht es:
Set db = CurrentDb()
strSQL = "SELECT ID, Betriebsdatum, Startzeit, Endezeit, MaximalZeit FROM Betriebskalender ORDER BY Betriebsdatum"
Set rst_bk = db.OpenRecordset(strSQL, dbOpenDynaset)
Set rst_daten = db.OpenRecordset("tbl_Eingabe", dbOpenDynaset)
rst_bk.MoveFirst
rst_daten.MoveFirst
While Not rst_daten.EOF
' ******************************************************
' Start und Ende einlesen und bei NULL Werten abfangen
' ******************************************************
If IsNull(rst_daten("Start_PzM")) = True Then
dlz_start = ("01.01.1900")
End If
If IsNull(rst_daten("Start_PzM")) = False Then
dlz_start = rst_daten("Start_PzM")
End If
If IsNull(rst_daten("EndeAbf_spaet")) = True Then
dlz_ende = ("01.01.1900")
End If
If IsNull(rst_daten("EndeAbf_spaet")) = False Then
dlz_ende = rst_daten("EndeAbf_spaet")
End If
If dlz_start = dlz_ende Then
dlz_summe = 0
With rst_daten
.Edit
!dlz_summe = dlz_summe
.Update
End With
GoTo wende
End If
' ******************************************************
' Aufspaltung in Datum und Uhrzeit
' ******************************************************
dlz_start_date = DateValue(dlz_start)
dlz_start_time = CDbl(TimeValue(dlz_start))
dlz_ende_date = DateValue(dlz_ende)
dlz_ende_time = CDbl(TimeValue(dlz_ende))
' **************************************************
' DLZ <= 1 Tag? Dann nur Zeitunterschied = DLZ_Summe
' **************************************************
If dlz_start_date = dlz_ende_date Then
dlz_summe = dlz_ende_time - dlz_start_time
With rst_daten
.Edit
!dlz_summe = dlz_summe
.Update
End With
GoTo wende
End If
' ************************************************
' DLZ > 1 Tag
' ************************************************
' Startdatum im BK finden (dlz_start_date = bk_date)
kriterium = "Betriebsdatum = " & CLng(dlz_start_date) 'datum aus PzM Start ; CLng -> Sonst Fehlermeldung; Bau einer SQL Anweisung
rst_bk.FindFirst kriterium 'Erster DS mit gleichem Datum finden
bk_ende_zeit = CDbl(rst_bk("Endezeit")) 'EndeZeit des Starttages ermitteln)
dlz_summe = dlz_summe + CDbl((bk_ende_zeit - dlz_start_time)) 'Zeitdiff zur DLZ addieren
' *************************************************************
' nächster Tag BK auswerten und addieren (ganz oder teilweise)
' *************************************************************
bk_next:
rst_bk.MoveNext
bk_datum = rst_bk("Betriebsdatum")
bk_ende_zeit = CDbl(rst_bk("Endezeit"))
bk_start_zeit = CDbl(rst_bk("Startzeit"))
bk_maxzeit = CDbl(rst_bk("MaximalZeit"))
' aktueler BK ist = Date_Ende Auftrag
If bk_datum = dlz_ende_date Then
dlz_summe = dlz_summe + (dlz_ende_time - bk_start_zeit)
With rst_daten
.Edit
!dlz_summe = dlz_summe
.Update
End With
GoTo wende
End If
' aktueller BK ist < Date_Ende Auftrag
If bk_datum < dlz_ende_date Then
dlz_summe = dlz_summe + bk_maxzeit
End If
GoTo bk_next
wende:
dlz_summe = 0
rst_daten.MoveNext
Wend
MsgBox ("fertig")
End Sub
|