ACCESS/VB.NET: Tabelle auslesen, Werte berechnen und in eine neue Tabelle schreiben

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Pe..CH.

    ACCESS/VB.NET: Tabelle auslesen, Werte berechnen und in eine neue Tabelle schreiben

    Hallo

    Ich suche einen Ansatz,einen Schubs für meine vorletzte Aufgabe in meinem Programm.

    Ich habe eine ACCESS mdb mit einer Tabelle TabDaten, dort werden jeden Tag Daten gespeichert: Die Felder sind (für dieses Beispiel vereinfacht) ID (Primärschlüssel), Mitarbeiter (Integer) und diverse Daten (Datum, AnzahlAufträge, AnzahlFehler). Dazu kommt eine Tabelle für die Mitarbeiter, wo der Name gespeichert ist. Angenommen, für jeden Mitarbeiter wird täglich ein Datensatz gespeichert und es soll eine Auswertung möglich sein. Für einen wählbaren Zeitraum von/bis werden pro Mitarbeiter seine AnzahlAufträge und AnzahlFehler zusammengrrechnet und in einer weiteren Tabelle abgespeichert, zusätzlich werden berechnete Werte wie Fehlerquotient, Aufträge/Tag usw. gespeichert. Bei 10 Mitarbeitern würde die Tabelle TabAuswertung dann 10 Datensätze haben.

    Ich muss nun meine TabDaten durchlaufen und die Werte pro Mitarbeiter aufaddieren und hier fehlt mir der Ansatz. Mein Selektionskriterium ist der Zeitraum von/bis. Ich habe in meinen VB/SQL-Büchern leider nicht viel gefunden, wie ich die Tabelle elegant durchlaufen sollte. Beim Aufaddieren müsste ich die Werte ja irgendwo zwischenspeichern. Hat jemand eine Idee für mich ?

    Danke
    Du hast schon gesehen, dass ich Dir eine SQL-Anweisung und keim VB-Code gegeben habe.

    Wieso willst Du eigentlich die Daten in eine eigene Tabelle schreiben? Dies erzeugt nur redundante Daten.

    Dies wird dann auch wiederum mit einer SQL-Anweisung gemacht.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Das ist mir schon klar.

    Mein Code-Fragment:

    VB.NET-Quellcode

    1. Dim con As New OleDb.OleDbConnection
    2. Dim cmd As New OleDb.OleDbCommand
    3. Dim reader As OleDbDataReader
    4. Dim AbfrageVon = CDate(DateTimeReportVon.Text)
    5. Dim AbfrageBis = CDate(DateTimeReportBis.Text)
    6. con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\Database.mdb"
    7. cmd.Connection = con
    8. cmd.CommandText = "SELECT Mitarbeiter, SUM(Daten1), SUM(Daten2), SUM(Daten3) FROM TabDaten GROUP BY NameSB WHERE (Datum >= " & AbfrageVon & ") AND (Datum <= " & AbfrageBis & ")"
    9. Try
    10. con.Open()
    11. reader = cmd.ExecuteReader()
    12. Do While reader.Read()
    13. 'keine Idee
    14. Loop
    15. reader.Close()
    16. con.Close()
    17. Catch ex As Exception
    18. MessageBox.Show(ex.Message)
    19. End Try


    Wie kome ich mit dem Reader an meine Summen ? Ob ich sie in eine neue (redundante) Tabelle oder in ein Listview schreibe, ist ja dann unerheblich und auch nicht das Problem.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Pe..CH“ ()

    Pe..CH schrieb:

    'keine Idee


    versuchs mal damit:

    VB.NET-Quellcode

    1. MsgBox(reader.Item(0) & " - " & reader.Item(1) & " - " & reader.Item(2) & " - " & reader.Item(3))


    PS
    Versuche es zunächst einmal ohne den Filter auf das Datum.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    So,ich hab es fast pefekt hinbekommen:

    VB.NET-Quellcode

    1. cmd.CommandText = "SELECT Mitarbeiter, SUM(AnzA) As SumA, SUM(AnzB) as SumB, SUM(AnzC) as SumC FROM TabDaten GROUP BY Mitarbeiter"
    2. Try
    3. con.Open()
    4. reader = cmd.ExecuteReader()
    5. Do While reader.Read()
    6. Dim Spalte As New ListViewItem(GetMitarbeiterName(CInt(reader("Mitarbeiter"))))
    7. Spalte.SubItems.Add(CStr(AbfrageVon))
    8. Spalte.SubItems.Add(CStr(AbfrageBis))
    9. Spalte.SubItems.Add(CStr(reader.Item("SumA")))
    10. Spalte.SubItems.Add(CStr(reader.Item("SumB")))
    11. Spalte.SubItems.Add(CStr(reader.Item("SumC")))
    12. ListView.Items.Add(Spalte)
    13. Loop
    14. reader.Close()
    15. con.Close()
    16. Catch ex As Exception
    17. MessageBox.Show(ex.Message)
    18. End Try


    Probleme macht mir nur noch das SUM auf einen Dezimalwert, da bekomme ich eine kryptische Fehlermeldung. Und die WHERE Klausel checke ich nachher auch noch aus.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Pe..CH“ ()