Supportnet / Forum / Datenbanken
Saldoberechnung
Frage
High Leute
Habe das Problem das ich ein Saldo pro Datensatz errechnen lassen will, wie bei einem Kassenbuch, so das die Abfrage b.z.w. das Formular den aktuellen Saldo pro Zeile anzeigt. Access müsste also den Saldo aus dem vorherigen Datensatz mit den Einnahmen und Ausgaben des aktuellen Datensatzes addiereb oder subtrahieren. Kann mir jamand sagen wie ich das hinkriege.
Antwort 1 von piano
Hi
Die Aufgabe lässt sich für neue Sätze relativ einfach lösen. Ein Problem ist das Nachziehen der Saldowerte, wenn ein älterer Datensatz geändert oder gelöscht wird. Das müsste man unterbinden und durch Gegenbuchungen lösen. Dann könnte folgender Lösungsansatz helfen:
in einem beliebigen Modul oder vor 1. sub in Formular-Code:
Public saldoneu
Ein VBA-Code beim Formular-Ereignis "Beim Anzeigen", der alle vorherigen Beträge summiert:
Private Sub Form_Current()
On Error GoTo err_
dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = Me.RecordsetClone
If Not Me.NewRecord Then Exit Sub
saldoneu = 0
rs.MoveFirst
If Not rs.EOF Then
Do While Not rs.EOF
saldoneu = saldoneu + rs!Betrag
rs.MoveNext
Loop
End If
exex:
Me.Saldo = saldoneu
rs.Close
Set rs = Nothing
Exit Sub
err_:
If Err.Number = 3021 Then GoTo exex:
End Sub
Nach Änderung des Betrages:
Private Sub Betrag_AfterUpdate()
Me.Saldo = Me.Saldo + Me.Betrag
End Sub
wenn du eingang und ausgangs-felder hast, dann für die 2 felder die sb-routinen erstellt werden! In diesem beispiel gibt es die felder Saldo und Betrag, diese Namen entsprechend angepassen!
gruss piano
Die Aufgabe lässt sich für neue Sätze relativ einfach lösen. Ein Problem ist das Nachziehen der Saldowerte, wenn ein älterer Datensatz geändert oder gelöscht wird. Das müsste man unterbinden und durch Gegenbuchungen lösen. Dann könnte folgender Lösungsansatz helfen:
in einem beliebigen Modul oder vor 1. sub in Formular-Code:
Public saldoneu
Ein VBA-Code beim Formular-Ereignis "Beim Anzeigen", der alle vorherigen Beträge summiert:
Private Sub Form_Current()
On Error GoTo err_
dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = Me.RecordsetClone
If Not Me.NewRecord Then Exit Sub
saldoneu = 0
rs.MoveFirst
If Not rs.EOF Then
Do While Not rs.EOF
saldoneu = saldoneu + rs!Betrag
rs.MoveNext
Loop
End If
exex:
Me.Saldo = saldoneu
rs.Close
Set rs = Nothing
Exit Sub
err_:
If Err.Number = 3021 Then GoTo exex:
End Sub
Nach Änderung des Betrages:
Private Sub Betrag_AfterUpdate()
Me.Saldo = Me.Saldo + Me.Betrag
End Sub
wenn du eingang und ausgangs-felder hast, dann für die 2 felder die sb-routinen erstellt werden! In diesem beispiel gibt es die felder Saldo und Betrag, diese Namen entsprechend angepassen!
gruss piano

