Hallo VB-Gemeinde,
ich stehe vor einem kleinen Problem.
Ich habe eine Datenbankabfrage, die eine 24-Stunden-Auswertung fährt. Diese wird aus der DB ausgelesen und einem DataReader übergeben. Soweit so gut.
Der DataReader wird dann mit einer While - Schleife solange durchlaufen, wie Rows vorhaden sind (HasRows). Die einzelnen Inhalte werden dann in einer Exceltabelle einetragen.
Leider kann es vorkommen, dass es für eine Stunde keine Werte gibt.
Beispiel: 01, 02, 04, ... hier würde die Stunde 03 fehlen.
Mittels einer If-Abfrage wird beim Lesen des Readers hierbei geprüft, ob Stunde = Stunde ist (hierbei wird eine fortlaufende Stundenzahl mitgeführt). Ist die laufende Stunde mit der Stunde des Datensatzes nicht identisch, wird über den else-Zweig eine Dummy-Zeile in das Exceltabellenblatt eingefügt, damit es nicht zu einer Lücke kommt.
Dies funktioniert sehr gut, bis die erste Lücke gefüllt ist. Beim nächsten Durchlaufen des Readers ist der aber schon 1 Stunde weiter, so dass es ab jetzt immer eine Stunde unterschied gibt und nur Dummy-Zeilen eingefüht werden.
Jetzt meine Frage: gibt es eine Möglichkeit, den Reader um eine Position zurückzusetzen?
Hier mal der Code:
Vielen Dank für Eure Mithilfe,
Gruß vom Doc
ich stehe vor einem kleinen Problem.
Ich habe eine Datenbankabfrage, die eine 24-Stunden-Auswertung fährt. Diese wird aus der DB ausgelesen und einem DataReader übergeben. Soweit so gut.
Der DataReader wird dann mit einer While - Schleife solange durchlaufen, wie Rows vorhaden sind (HasRows). Die einzelnen Inhalte werden dann in einer Exceltabelle einetragen.
Leider kann es vorkommen, dass es für eine Stunde keine Werte gibt.
Beispiel: 01, 02, 04, ... hier würde die Stunde 03 fehlen.
Mittels einer If-Abfrage wird beim Lesen des Readers hierbei geprüft, ob Stunde = Stunde ist (hierbei wird eine fortlaufende Stundenzahl mitgeführt). Ist die laufende Stunde mit der Stunde des Datensatzes nicht identisch, wird über den else-Zweig eine Dummy-Zeile in das Exceltabellenblatt eingefügt, damit es nicht zu einer Lücke kommt.
Dies funktioniert sehr gut, bis die erste Lücke gefüllt ist. Beim nächsten Durchlaufen des Readers ist der aber schon 1 Stunde weiter, so dass es ab jetzt immer eine Stunde unterschied gibt und nur Dummy-Zeilen eingefüht werden.
Jetzt meine Frage: gibt es eine Möglichkeit, den Reader um eine Position zurückzusetzen?
Hier mal der Code:
VB.NET-Quellcode
- ...
- If Reader.HasRows Then
- While Reader.Read()
- RowCount += 1
- CellNr = (StartRow + RowCount)
- '
- If Stunde = 23 Then
- Stunde = 0
- Else
- Stunde += 1
- End If
- If Stunde = Reader(2) Then
- ws.Cells(CellNr, 1).value = Reader(0).ToString
- ws.Cells(CellNr, 2).value = Reader(1).ToString
- ws.Cells(CellNr, 3).value = Reader(2)
- ws.Cells(CellNr, 4).value = Reader(3).ToString
- ws.Cells(CellNr, 5).value = Reader(4).ToString
- ws.Cells(CellNr, 6).value = Reader(5)
- ws.Cells(CellNr, 7).value = Reader(6)
- Else
- ws.Cells(CellNr, 1).value = Strings.Left((RowCount / 24) + 1, 1)
- ws.Cells(CellNr, 2).value = Switch(ws.Cells(CellNr, 1).value = 1, "MONTAG", ws.Cells(CellNr, 1).value = 2, "DIENSTAG", ws.Cells(CellNr, 1).value = 3, "MITTWOCH", ws.Cells(CellNr, 1).value = 4, "DONNERSTAG", ws.Cells(CellNr, 1).value = 5, "FREITAG", ws.Cells(CellNr, 1).value = 6, "SAMSTAG", ws.Cells(CellNr, 1).value = 7, "SONNTAG")
- '### Stunde berechnen
- If IsNumeric(ws.Cells(CellNr - 1, 3).value) And ws.Cells(CellNr - 1, 3).value < 23 Then
- ws.Cells(CellNr, 3).value = ws.Cells(CellNr - 1, 3).value + 1
- ElseIf Not IsNumeric(ws.Cells(CellNr - 1)) Or ws.Cells(CellNr - 1, 3).value = 23 Then
- ws.Cells(CellNr, 3).value = 0
- End If
- '
- ws.Cells(CellNr, 4).value = "0"
- ws.Cells(CellNr, 5).value = "0"
- ws.Cells(CellNr, 6).value = "00:00:00"
- ws.Cells(CellNr, 7).value = "00:00:00"
- End If
- End While
- End If
- ...
Vielen Dank für Eure Mithilfe,
Gruß vom Doc