vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Filterstring 
Autor: Knabber
Datum: 29.01.19 16:26

Hallo
Leider bin Ich schon wieder auf ein Problem gestoßen.
Ich möchte aus einer Tabelle eine Summe bilden mit 2 abhängigkeiten

Die Tabelle ist "Eintraege"
gebunden über Bindingsource,Dataset,AccessDB
In der tabelle sind Spalten u.a.
Jahr.............String z.b. 2019, 2020 usw
Monat............String z.b. Januar, Februar, usw.
Einnahmen........Currency (C2) z,b. 32,95
Ausgaben.........Currency (C2) z,b. 32,95

Ich bekomme es nicht auf die Reihe Die Summe aus der Tabelle "Eintraege"

"Einnahmen" nur aus dem Monat Januar und dem Jahr 2019 zu bekommen
und in eine Textbox anzuzeigen.


  Dim SumJanuar As HaushaltskasseDataSet.Eintraege.Where Jahr= "2019" And _
    Monat="Januar".Sum
        tbx_Summe_Januar.Text = SumJanuar
Diesen Code hab ich mir zusammengereimt. Leider ohne Erfolg. Ich komme mit diesem Code nicht weiter,
gibt aber auch keine Fehlermeldung
Weiss jemand weiter ?
Gruß
SA
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filterstring 
Autor: Manfred X
Datum: 30.01.19 12:40

Hallo!

Deine Tabelle ist im Hinblick auf Datentypen ungeeignet spezifiziert (DateTime).
Aus diesem Grund werden Konvertierungen benötigt.
Das geht nicht über den Filterstring.
Der Currency-Typ wird in VB.Net gewöhnlich als Decimal abgebildet.

Hier ein untypisiertes Beispiel (Windows.Forms):
Public Class frmDemo
    Dim dt As New DataTable
 
    Private Sub frmDemo_Load(sender As Object, 
                             e As EventArgs) Handles MyBase.Load
 
        'Einige Testdaten
        dt.Columns.Add("Jahr", GetType(String))
        dt.Columns.Add("Monat", GetType(String))
        dt.Columns.Add("Einnahmen", GetType(Decimal))
 
        Dim rndm As New Random(1234)
        For i As Integer = 1 To 1000
            dt.Rows.Add(rndm.Next(2016, 2020).ToString,
                       rndm.Next(1, 13).ToString,
                       CDec(rndm.Next(50, 150)))
        Next i
 
        Dim jahr, monat, rowcount As Integer
        Dim summe As Decimal
 
        For i As Integer = 0 To dt.Rows.Count - 1
            Dim row As DataRow = dt.Rows(i)
            'Konvertieren
            If Integer.TryParse(row.Field(Of String)("Jahr"), jahr) AndAlso
               Integer.TryParse(row.Field(Of String)("Monat"), monat) Then
                'Auswahlbedingungen prüfen 
                If jahr = 2019 AndAlso monat = 1 Then
                    summe += row.Field(Of Decimal)("Einnahmen")
                    rowcount += 1
                End If
            End If
        Next i
 
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filterstring 
Autor: Knabber
Datum: 30.01.19 12:44

Danke
Ich hab es selber hinbekommen

 Dim Januar_Einnahmen = (From r In HaushaltskasseDataSet.Eintraege Where _
   r.Monat = "Januar" And r.Jahr = cbx_Jahr.Text Select r.Betrag_Einnahmen).Sum( _
   )
        tbx_Januar_Einnahmen.Text = CStr(Januar_Einnahmen)
Vielen Dank
SA
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filterstring 
Autor: Manfred X
Datum: 30.01.19 12:48

Ich hatte übersehen, daß bei der Tabelle
Monatsnamen eingetragen sind. Bei dieser Spalte entfällt
deshalb die Integer-Konvertierung in meinem Beispiel.

Diese Tabelle ist vermutlich eine unsichere Sache.
Jahresangaben als String und Monatsnamen sind Fehlerbedingungen,
falls Tippfehler bei der Dateneingabe im Erfassungsprogramm
nicht abgefangen worden sind.
Dein LINQ-Code kann Eingabefehler nachträglich nicht identifizieren.
Dafür wären zusätzliche Überprüfungen erforderlich.

Beitrag wurde zuletzt am 30.01.19 um 12:57:23 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filterstring 
Autor: Knabber
Datum: 30.01.19 14:37

Ja, das stimmt
in der Tabelle ist aber das ganz normale Datum (Date mitenthalten)
Ich habe nur (Monat as String) und (Jahr als String) zusätzlich mit aufgenommen wegen der leichteren Filterung und für mich zur besseren übersicht.
Es existiert ja eine Spalte "Datum" as Shortdate
Man hätte auch aus der Spalte "Datum" alles auseinandernehmen können und somit nach Monat und Jahr filtern können
aber für mich als Abfänger noch zu kompliziert (z.B Aus Datum den Monat,Jahr rauszufiltern und dann daraus die Beträge zu addieren

Es funktioniert so ganz gut. Jedenfalls weiss ich was da passiert.


Vielen Dank für Deine Mühe
SA
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel