Datumsabfragen aus DS oder DT

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 38 Antworten in diesem Thema. Der letzte Beitrag () ist von Amelie.

    Alle Novembervorgänge oder wirklich alle-alle existenten Vorgänge?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Na dann passt es doch. Dann musst Du also nur noch Dein 11.2021-String in das entsprechende Datumsformat umwandeln.
    Das gibt's bestimmt ne einfache Funktion dafür. Ansonsten schusterst Du Dir das selber zusammen. Also $"#{Monat}/{Tag}/{Jahr}#"
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Mit welcher Codezeile schickst Du die SQL-Abfrage an die DB?
    Wo hast Du diese Zeile eingetragen, dass bei Dir die Novemberdaten im DGV angezeigt werden?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed

    Also ich hab mal was zusammengebaut :)

    VB.NET-Quellcode

    1. Public Class testform
    2. Public SQL_date1 As String = Date.Now.ToString("dd.MM.yyyy")
    3. Public Function GetFirstDay(ByVal getDate As DateTime) As DateTime
    4. Return New DateTime(getDate.Year, getDate.Month, 1)
    5. End Function
    6. Public Function GetLastDay(ByVal getDate As DateTime) As DateTime
    7. Return GetFirstDay(getDate).AddMonths(1).Subtract(New TimeSpan(1, 0, 0, 0, 0))
    8. End Function
    9. Private Sub FillByMonthToolStripButton_Click(sender As Object, e As EventArgs) Handles FillByMonthToolStripButton.Click
    10. DatumToolStripTextBox.Text = CStr(GetFirstDay(CDate(SQL_date1)))
    11. Datum1ToolStripTextBox.Text = CStr(GetLastDay(CDate(SQL_date1)))
    12. ' Das hat der Designer erstellt nachdem ich das DGV angebunden habe
    13. Try
    14. Me.VorgaengeTableAdapter.FillByMonth(Me.MyMds.Vorgaenge, New System.Nullable(Of Date)(CType(DatumToolStripTextBox.Text, Date)), New System.Nullable(Of Date)(CType(Datum1ToolStripTextBox.Text, Date)))
    15. Catch ex As System.Exception
    16. System.Windows.Forms.MessageBox.Show(ex.Message)
    17. End Try
    18. End Sub
    19. Private Sub testform_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    20. 'TODO: Diese Codezeile lädt Daten in die Tabelle "MyMds.Vorgaenge". Sie können sie bei Bedarf verschieben oder entfernen.
    21. Me.VorgaengeTableAdapter.Fill(Me.MyMds.Vorgaenge)
    22. End Sub
    23. End Class


    Soweit klappt das. Jetzt die Fragen:
    Wie baue ich das in meine " Monatsblätterfunktion " ein und wie ändere ich das das DGV von der "normalen" Anzeige zu dieser?
    Bilder
    • sqlabfrage-6.jpg

      58,15 kB, 828×379, 28 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Eh … what? Ich verstehe nur die Hälfte. Weil ich nicht weiß, wo es jetzt hängt.
    Weil: Deine Blätterfunktion nimmt ja irgendein Datum und macht daraus ein anderes. Daher nimm dieses eine Datum, dann Deine GetFirstDay- und Deine GetLastDay-Funktion darauf anwenden, um Monatsanfang und -ende zu erhalten. Und dann diese FillByMonth-Funktion aufrufen.
    Und wie Du die normale in die monatsspezifische Ansicht umstellst: naja, eben genau diesen Code ausführen, den ich grad beschrieben hab.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich denke ich habe es hinbekommen.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class testform
    2. Public int_month As Integer = 0
    3. Public SQL_date1 As String = Date.Now.ToString("dd.MM.yyyy")
    4. Public Function GetFirstDay(ByVal getDate As DateTime) As DateTime
    5. Return New DateTime(getDate.Year, getDate.Month, 1)
    6. End Function
    7. Public Function GetLastDay(ByVal getDate As DateTime) As DateTime
    8. Return GetFirstDay(getDate).AddMonths(1).Subtract(New TimeSpan(1, 0, 0, 0, 0))
    9. End Function
    10. #Region "Monatssauswahl"
    11. Private Sub btn_prevMonth_Click(sender As Object, e As EventArgs) Handles btn_monthprev.Click
    12. End Sub
    13. Private Sub btn_nextMonth_Click(sender As Object, e As EventArgs) Handles btn_monthnext.Click
    14. End Sub
    15. Private Sub ButtonClicks_Click(sender As System.Object, e As System.EventArgs) Handles btn_monthprev.Click, btn_monthnext.Click
    16. Select Case True
    17. Case sender Is btn_monthnext
    18. int_month += 1
    19. Dim aktlmonth = SQL_date1
    20. Dim nextmonth As Date = CDate(SQL_date1).AddMonths(int_month)
    21. Dim nextmonth2 As String = nextmonth.ToString("dd.MM.yyyy")
    22. DatumToolStripTextBox.Text = CStr(GetFirstDay(CDate(nextmonth2)))
    23. Datum1ToolStripTextBox.Text = CStr(GetLastDay(CDate(nextmonth2)))
    24. Me.VorgaengeTableAdapter.FillByMonth(Me.MyMds.Vorgaenge, New System.Nullable(Of Date)(CType(DatumToolStripTextBox.Text, Date)), New System.Nullable(Of Date)(CType(Datum1ToolStripTextBox.Text, Date)))
    25. Case sender Is btn_monthprev
    26. int_month -= 1
    27. Dim aktlmonth = SQL_date1
    28. Dim nextmonth As Date = CDate(SQL_date1).AddMonths(int_month)
    29. Dim nextmonth2 As String = nextmonth.ToString("dd.MM.yyyy")
    30. DatumToolStripTextBox.Text = CStr(GetFirstDay(CDate(nextmonth2)))
    31. Datum1ToolStripTextBox.Text = CStr(GetLastDay(CDate(nextmonth2)))
    32. Me.VorgaengeTableAdapter.FillByMonth(Me.MyMds.Vorgaenge, New System.Nullable(Of Date)(CType(DatumToolStripTextBox.Text, Date)), New System.Nullable(Of Date)(CType(Datum1ToolStripTextBox.Text, Date)))
    33. End Select
    34. End Sub
    35. #End Region
    36. Private Sub testform_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    37. 'TODO: Diese Codezeile lädt Daten in die Tabelle "MyMds.Vorgaenge". Sie können sie bei Bedarf verschieben oder entfernen.
    38. Me.VorgaengeTableAdapter.Fill(Me.MyMds.Vorgaenge)
    39. End Sub

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Zeile#26-#32 und Z#37-#43 sind identisch und sollten daher in eine Sub ausgelagert werden. Entferne noch diese unsägliche Kopplung an die Control-Property DatumToolStripTextBox.Text und dann sieht das halbwegs akzeptabel aus.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Moin moin

    Also hier die bereinigte Version. Habe meine TableAdapter für die Summen der Einnahmen / Ausgaben noch angepasst.

    Wenn es etwas zu verbessern gibt... ;)

    Spoiler anzeigen

    SQL für die Einnahmen ( EA_ID=2 ) des gewählten Monat

    SQL-Abfrage

    1. SELECT EA_ID, Summe FROM Vorgaenge WHERE (EA_ID = 2) AND (Datum BETWEEN ? AND ?) ORDER BY ID


    VB.NET-Quellcode

    1. #Region "Monatssauswahl"
    2. Private Sub btn_prevMonth_Click(sender As Object, e As EventArgs) Handles btn_monthprev.Click
    3. End Sub
    4. Private Sub btn_nextMonth_Click(sender As Object, e As EventArgs) Handles btn_monthnext.Click
    5. End Sub
    6. Private Sub ButtonClicks_Click(sender As System.Object, e As System.EventArgs) Handles btn_monthprev.Click, btn_monthnext.Click
    7. lbl_selected_month.Visible = True
    8. Select Case True
    9. Case sender Is btn_monthnext
    10. Money.int_month += 1
    11. Dim nextmonth As Date = CDate(Money.SQL_date).AddMonths(Money.int_month)
    12. getmonth()
    13. ' dient nur für die Anzeige auf der GUI
    14. Dim lblmonth As String = nextmonth.ToString("MMMM yyyy")
    15. lbl_month.Text = lblmonth 'Anzeige Buttons
    16. lbl_selected_month.Text = "Daten für Monat: " & lbl_month.Text
    17. Case sender Is btn_monthprev
    18. Money.int_month -= 1
    19. Dim nextmonth As Date = CDate(Money.SQL_date).AddMonths(Money.int_month)
    20. getmonth()
    21. ' dient nur für die Anzeige auf der GUI
    22. Dim lblmonth As String = nextmonth.ToString("MMMM yyyy")
    23. lbl_month.Text = lblmonth 'Anzeige Buttons
    24. lbl_selected_month.Text = "Daten für Monat: " & lbl_month.Text
    25. End Select
    26. End Sub
    27. Private Sub getmonth()
    28. Dim aktlmonth = Money.SQL_date1
    29. Dim nextmonth As Date = CDate(Money.SQL_date1).AddMonths(Money.int_month)
    30. Dim nextmonth2 As String = nextmonth.ToString("dd.MM.yyyy")
    31. tb_firstday.Text = CStr(Money.GetFirstDay(CDate(nextmonth2)))
    32. tb_lastday.Text = CStr(Money.GetLastDay(CDate(nextmonth2)))
    33. 'füllt das DGV & TB Differenz-Summe
    34. Me.VorgaengeTableAdapter.FillByMonth(Me.MyMds.Vorgaenge, (CType(tb_firstday.Text, Date)), (CType(tb_lastday.Text, Date)))
    35. 'füllt die TB der Summen Einnahmen / Ausgaben
    36. Me.AusgabenTableAdapter.Fill(Me.MyMds.Ausgaben, (CType(tb_firstday.Text, Date)), (CType(tb_lastday.Text, Date)))
    37. Me.EinnahmenTableAdapter.Fill(Me.MyMds.Einnahmen, (CType(tb_firstday.Text, Date)), (CType(tb_lastday.Text, Date)))
    38. End Sub
    39. #End Region

    Bilder
    • monthselect-1.jpg

      28,86 kB, 994×144, 28 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Amelie“ ()

    Zeilen #2-#5 weg.
    Zeilen #12-#17 und #20-#25 sind identisch. Einmal weg und einmal hinter das End Select.
    In getMonth sind immer noch Abhägigkeiten an GUI-Control-Properties.
    nextmonth2? ausbaufähige Benennung.
    Ich könnte ja jetzt noch kommen mit SoC, aber das wär wohl Overkill …
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed

    SoC ... Ja ich tue mich oft schwer mit einer "Namesvergabe".
    Wie kann ich mir das erleichtern?

    Codeverbesserungen setze ich noch um ;) Wusste nicht, das man ein Button-Event abarbeiten kann wenn der Button nicht im Code steht.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    wenn der Button nicht im Code steht.
    Keine Ahnung, was Du meinst. Aber letztenendes Ist die Event-EventHandler-Geschichte so:
    Der Button ruft in den Wald: »Ich wurde geklickt!« Das macht der Button, indem er sein Click-Event feuert. Man kann auch sagen, dass der Button eine Feuerwerksrakete steigen lässt.
    Und dann kommt's drauf an, ob sich jemand dafür interessiert. Ob es EventHandler gibt, die den Ruf im Wald hören (wollen) oder die Feuerwerksrakete sehen (wollen). Das steht im Code mithilfe von Handles ButtonX.Click. Wenn also eine Prozedur diesen "Anhang" im Prozedurkopf hat, interessiert es sich für das Event. Und davon hast Du mehrere Stellen in Deinem Code: einmal bei dieser Methode, die aber nix macht. Daher kann sie weg. Und einmal bei dieser. Und da dort was passiert, sollte die Stelle auch so bleiben.
    Aber vielleicht versteh ich auch nicht, was Du mit nicht-im-Code-erscheinen meinst.

    Ach ja: SoC - das war ein Link, der zu einer Erklärung führt. SoC steht für Seperation of Concerns. Will heißen: in einer Methode sollte nicht alles durchmischt sein, sondern nur z.B. GUI-Manipulation oder Aufruf anderer Methoden oder Anweisung an andere Klasseninstanzen. Nicht wild durchmischen, sonst blickt man später nicht mehr durch.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich hoffe ich bekomme das mit dem "wild durchmischen" noch in den Griff. Bei mir im Kopf ist das immer anders geplant als es dann letztendlich im Code steht. ;)
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:



    Wenn es etwas zu verbessern gibt... ;)


    SQL für die Einnahmen ( EA_ID=2 ) des gewählten Monat

    SQL-Abfrage

    1. SELECT EA_ID, Summe FROM Vorgaenge WHERE (EA_ID = 2) AND (Datum BETWEEN ? AND ?) ORDER BY ID


    Datum Between brauchst du ja garnicht, nimm doch einfach monat und Jahr. Du möchtest doch Monatsblätter


    hier ein Bsp.
    Tabelle = tbl_Tanken
    TankDatum ist das Feld für Filter

    hier Sql für Monat und Jahr

    SQL-Abfrage

    1. SELECT *
    2. FROM tbl_Tanken
    3. WHERE (((Month([TankDatum]))=6) AND ((Year([TankDatum]))=2021));


    hier für bestimmte Tage

    SQL-Abfrage

    1. SELECT *
    2. FROM tbl_Tanken
    3. WHERE (((Month([TankDatum]))=6) AND ((Day([TankDatum])) Between 15 And 25));


    du nutzt Access als DB, dann kannst du auch Pivot-Abfragen erstellen

    Zitierfehler korrigiert ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    musst dich mal mit beschäftigen, hier ein kleines Bsp. mit der tbl_Tanken Tabelle

    das resultat für eine Jahresübersicht


    so sieht die Abfrage aus


    hier die Sql dazu

    SQL-Abfrage

    1. TRANSFORM Sum(tbl_Tanken.GetankteLiter) AS SummevonGetankteLiter
    2. SELECT Format([TankDatum],"yyyy") AS [in Jahr], tbl_Tanken.KFZ, Sum(tbl_Tanken.GetankteLiter) AS Gesamt
    3. FROM tbl_Tanken
    4. GROUP BY Format([TankDatum],"yyyy"), tbl_Tanken.KFZ
    5. PIVOT Format([TankDatum],"mmm") In ("Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez");