FindRows in dataview mit Date

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von strzata.

    strzata schrieb:

    Weil Rows hinzukommen. Wenn jemand an einem Tag nicht in der Praxis war, hat er auch keinen Eintrag in der t005 gemacht. Bei der Berechnung muss ich eine Row mit 7 Stunden minus einfügen. Es muss später sichtbar sein,...
    Kannst dir auch mal angugge: Stechuhr
    Das ist jetzt nur ein Proggi für meine Arbeitszeiten - wäre aber recht einfach erweiterbar auch auf mehrere Mitarbeiter.
    Allerdings hast du sicherlich ein recht anderes Datenmodell - aber dass du mal gesehen hast, wie ein Datenmodelll aussehen kann....

    Neu

    Aus dem Ärmel 37 Zeilen
    Kommt Stempeln, Geht Stempeln, Ist-Stunden berechnen in einem vorgegebenen Zeitraum.
    Natürlich ohne aufhübschen und bedienerleichterungen. und nichts getestet. Performance erwarte ich alles instantan, aber gut das ist immer eine Frage des Datenvolumens

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Feiertage As New List(Of Date) 'Befüllen mit die Feiertage
    2. Private Sub btnKommt_Click(sender As Object, e As EventArgs) Handles btnKommt.Click
    3. Dim heute = Date.Today
    4. If Feiertage.Contains(heute) OrElse {DayOfWeek.Saturday, DayOfWeek.Sunday}.Contains(heute.DayOfWeek) Then Exit Sub
    5. Dim mitarbeiterID = CInt(numID.Value)
    6. Dim Mitarbeiter = If(DS1.Mitarbeiter.FindByID(mitarbeiterID), DS1.Mitarbeiter.AddMitarbeiterRow(mitarbeiterID, "Platzhalter", 7))
    7. DS1.AnwesenheitStarts.AddAnwesenheitStartsRow(Mitarbeiter, Date.Now)
    8. DS1.Mitarbeiter.AcceptChanges()
    9. DS1.AnwesenheitStarts.AcceptChanges()
    10. End Sub
    11. Private Sub btnGeht_Click(sender As Object, e As EventArgs) Handles btnGeht.Click
    12. Dim mitarbeiterID = CInt(numID.Value)
    13. Dim Mitarbeiter = DS1.Mitarbeiter.FindByID(mitarbeiterID)
    14. If Mitarbeiter Is Nothing Then Exit Sub
    15. Dim MitarbeiterAnwesenheitsStarts = Mitarbeiter.GetAnwesenheitStartsRows
    16. Dim MitarbeiterKommt = MitarbeiterAnwesenheitsStarts.FirstOrDefault
    17. If MitarbeiterKommt Is Nothing Then Exit Sub
    18. Dim Nu = Date.Now
    19. DS1.Anwesenheiten.AddAnwesenheitenRow(Mitarbeiter, MitarbeiterKommt.Kommt, Nu, (Nu - MitarbeiterKommt.Kommt).TotalHours)
    20. For Each start In MitarbeiterAnwesenheitsStarts
    21. start.Delete()
    22. Next
    23. DS1.AnwesenheitStarts.AcceptChanges()
    24. DS1.Anwesenheiten.AcceptChanges()
    25. End Sub
    26. Private Sub btnCalc_Click(sender As Object, e As EventArgs) Handles btnCalc.Click
    27. Dim mitarbeiterID = CInt(numID.Value)
    28. Dim Mitarbeiter = DS1.Mitarbeiter.FindByID(mitarbeiterID)
    29. If Mitarbeiter Is Nothing Then MessageBox.Show("Gibs nich")
    30. Dim von = dtpVon.Value
    31. Dim bis = dtpBis.Value
    32. Dim TagesAnwesenheiten = DS1.Anwesenheiten.Where(Function(a) a.Geht >= von AndAlso a.Geht <= bis).GroupBy(Function(a) a.Geht.Date)
    33. Dim IstStunden = TagesAnwesenheiten.Sum(Function(g) Math.Min(Mitarbeiter.TagesSoll, TagesIst(g)))
    34. MessageBox.Show($"{Iststunden}h erfasst von {von} bis einschließlich {bis}")
    35. End Sub
    36. Private Function TagesIst(g As IGrouping(Of Date, DataSet1.AnwesenheitenRow)) As Double
    37. Return g.Sum(Function(a) a.Ist)
    38. End Function

    Bildle Datenmodell

    Bildle Form

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Neu

    Also wenn Du das in kurzer Zeit zusammengebastelt hast - Hut ab!
    Ich will Dich jetzt nicht löchern, dass Du mir einen Lehrgang dazu gibst. Muss mich wirklich mal damit richtig beschäftigen. Hab schon mal ein großes DS gebastelt, weil ich 6 Relationen brauchte. Das ging damit sehr gut. War aber alles nicht typisiert und mit tippel-tappel gemacht.
    Eine Frage abschliessend noch: meine Table konnte ich mit 3 Zeilen (DataApdater) in die DB zurückschreiben. Geht das auch so mit DataSets?
    Nochmal vielen Dank für Deine Mühe.
    Schöne Grüße
    Norbert

    Neu

    strzata schrieb:

    Hab schon mal ein großes DS gebastelt, weil ich 6 Relationen brauchte. Das ging damit sehr gut. War aber alles nicht typisiert
    Wenn du ein DS mit dem Designer erstellst ist alles automatisch typisiert.

    strzata schrieb:

    meine Table konnte ich mit 3 Zeilen (DataApdater) in die DB zurückschreiben. Geht das auch so mit DataSets?
    Man kann grundsätzlich eine typisierte Tabelle genauso an eine DB knüpfen wie auch eine untypisierte.
    Es gibt für die typisierte Version noch speziellere Tableadapter, die selbst da noch ein bissle mehr automatisieren können, aber dieses Feature nutze ich selbst auch nicht mal, weil mit den DataAdaptern tut man sich kaum einen ab, wie du selbst festgestellt hast.
    Es könnte sein, dass du von der typisierten Tabelle mehr Gemecker kriegst. Wenn du einen Varchar-Wert aus der DB in eine Integer-Spalte deiner Tabelle schreiben willst, sollte der das nicht zulassen. Diese Fehlermeldungen sind, aber auch zur eigenen Sicherheit, genauso wie z.B. bei Option Strict On. Eine korrekte Typisierung sollte in der DB genauso wie im Programmcode vorliegen.