| |
VB.NET - Ein- und UmsteigerSaldo richtig rechnen ? | | | Autor: ERBRU | Datum: 18.04.21 12:25 |
| habe mir ein Form erstellt unter buchen soll nun ein korektes Salso gerechnet werden aus Ausgabe oder Einnahme
wer kann helfen ? die Tabelle hat diese Spalten:
Datum = Typ Date
Verwendungszweck = Typ String
Buchungstyp = Typ String (Einnahme, Ausgabe)
Betrag = Typ Integer
Saldo = Typ Integer
bei dieser Buchung müsste es -70 Saldo sein Richtig
Einnahme 30 Saldo 30
Einahme 30 Saldo 60
Ausgabe 60 Saldo 0
Ausgabe 20 Saldo 100
Ausgabe 50 Saldo 90
das ist falsch bei mir wie bekomme ich es richtig hin ?
dieser Code rechnet falsch, abr was ist falsch und wie richtig ?
Private Sub btnBuchen_Click(sender As Object, e As EventArgs) Handles _
btnBuchen.Click
Dim Saldo As Integer = 0
For Each row As DataGridViewRow In dgvDaten.Rows
Saldo += Convert.ToInt32(row.Cells(3).Value)
Next
If ComboBox1.SelectedIndex = -1 Then Return
If txtBuchungstyp.Text = "Ausgabe" Then
dt.Rows.Add(dtpDatum.Value.ToShortDateString, _
txtVerwendungszweck.Text, txtBuchungstyp.Text, nudBetrag.Value, _
Saldo - nudBetrag.Value)
txtVerwendungszweck.Text = ""
txtBuchungstyp.Text = ""
nudBetrag.Value = 0
ComboBox1.SelectedIndex = -1
Else
dt.Rows.Add(dtpDatum.Value.ToShortDateString, _
txtVerwendungszweck.Text, txtBuchungstyp.Text, nudBetrag.Value, _
Saldo + nudBetrag.Value)
txtVerwendungszweck.Text = ""
txtBuchungstyp.Text = ""
nudBetrag.Value = 0
ComboBox1.SelectedIndex = -1
End If
End Sub | |
Re: Saldo richtig rechnen ? | | | Autor: Manfred X | Datum: 19.04.21 08:57 |
| Hallo!
Rätselraten. Einige Ideen:
Ist "nud" ein NumericUpDown-Control?
Ist der Betrag in diesem NumericUpDown vorzeichenbehaftet? Increment?
Dieses Control verwendet den Datentyp Decimal für Werte.
Ich empfehle explizite Datentyp-Konvertierung.
Ich habe den Eindruck, das Vorzeichen der Buchungen wird nicht
beachtet. Alles positiv?
In Deinem Beispiel rechnest Du 30+30+60+20 (=140) - 50 = 90
Du musst bei der Saldo-Ermittlung beachten, ob es sich um eine Ausgabe
oder Einnahme handelt.
Wie ist die Einstellung des DatagridView? Filter gesetzt?
Du berechnest den Saldo über die Datenbindung, trägst den neuen Satz
aber direkt in die Tabelle ein. Codiere einheitlich.
Greife über den eindeutigen Bezeichner auf Spalten zu.
Ist die Reihenfolge der Datensätze im Grid irgendwie festgelegt?
Grundsätzlich sind Zeilen-Abfolgen in einer Datenbank
nicht definiert. Es scheint für diesen Zweck auch keinen
Satz-Schlüssel (Primarykey) zu geben.
Inwiefern ist es sinnvoll, Angaben, bezogen den jeweils
aktuellen Gesamt-Saldo der Tabelle/Abfrage, in einen einzelnen
Satz einzutragen?
Dieser Wert wäre vermutlich stets nach einer Abfrage explizit für
die vorhandenen Datensätze zu berechnen.
Für die Steuerung des Buchungscodes sollte keine String-Eingabe in
einem Textbox-Control herangezogen werden, sondern eine Enumeration,
die z.B. in einer Combobox zur Auswahl angegeben wird.
Die Rückgabe des DatetimePickers (Value) nutzt den Datentyp Date.
Diesen Wert wandelst Du per "ToShortDateString" in einen String um.
Du versuchst offenbar im Code diesen String in eine Date-Spalte einzutragen.
Trage den Wert direkt ein.
Nachträglich eingefügte Datums-Angaben verfälschen den Saldo, mit dem
die entsprechende Satzspalte gefüllt wird.
Beitrag wurde zuletzt am 19.04.21 um 09:22:21 editiert. | |
| 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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevDTA 3.0 Pro
SEPA mit Kontonummernprüfung
Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Weitere Infos
|
|
|
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
|
|