Access VBA Werte verrechnen
VBA Werte von Formular mit Werte in Tabelle verechnen
Hallo Community,
ich hatte vor einiger Zeit schon mal einen Beitrag über eine Tonerverwaltung in Access gemacht.
Dabei will ich den Toner auswählen und eine Anzahl eingeben. Die Anzahl soll dann mit dem Wert in der Tabelle verrechnet werden.
Ich habe da mit VBA beim Schließen des Formulares schon mal was pobiert aber irgendwie funktioniert das nicht:
Aber ich wage zu bezweifeln das dies richtig ist.
Ich wäre für Hilfe sehr Dankebar.
Gruß
Nemo
Hallo Community,
ich hatte vor einiger Zeit schon mal einen Beitrag über eine Tonerverwaltung in Access gemacht.
Dabei will ich den Toner auswählen und eine Anzahl eingeben. Die Anzahl soll dann mit dem Wert in der Tabelle verrechnet werden.
Ich habe da mit VBA beim Schließen des Formulares schon mal was pobiert aber irgendwie funktioniert das nicht:
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String
Dim anzahl1 As Integer
Dim anzahl2 As Integer
Dim ergebnis As Integer
Set Dbs = CurrentDb
strSQL = "SELECT * FROM Toner"
Set rs = db.OpenRecordset(strSQL)
If Not rs.EOF Then rs.MoveFirst
Do While Not rs.EOF
anzahl1 = rs!Feldname
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
Set Dbs = CurrentDb
strSQL = "SELECT * FROM Tonerausgabe"
Set rs = db.OpenRecordset(strSQL)
If Not rs.EOF Then rs.MoveFirst
Do While Not rs.EOF
anzahl2 = rs!Feldname
Loop
ergebnis = anzahl11 - anzahl2
DoCmd.RunSQL ("update toner set anzahl=ergebnis ;")
rs.Close
Set rs = Nothing
Set db = Nothing
Aber ich wage zu bezweifeln das dies richtig ist.
Ich wäre für Hilfe sehr Dankebar.
Gruß
Nemo
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 94932
Url: https://administrator.de/contentid/94932
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
14 Kommentare
Neuester Kommentar
Moin Moin
Ich hab n paar Fragen dazu:
Die Tabellen Toner und Tonerausgabe enthalten nur einen Datensatz?
Ein paar Anmerkungen
Wenn du Code postet verwende bitte das Tag (siehe Formatierungshilfe).
Gruß L.
Ich hab n paar Fragen dazu:
Die Tabellen Toner und Tonerausgabe enthalten nur einen Datensatz?
ergebnis = anzahl11 - anzahl2
Wo kommpt plötzlich die Variable anzahl11 her? Tippfehler?Ich habe da mit VBA beim Schließen des Formulares schon mal was pobiert aber irgendwie funktioniert das nicht:
Bekommst du Fehlermeldungen?Ein paar Anmerkungen
Set Dbs = CurrentDb
Ist doppelt gemoppelt. Reicht einmal. genauso wie:Set rs = Nothing
Set db = Nothing
Set db = Nothing
Wenn du Code postet verwende bitte das Tag (siehe Formatierungshilfe).
Gruß L.
1. die beiden Tabellen sollen mehrere Datensätze enthalten.
Und da fängt es schon an. Welche Datensätze sollen den Addiert werden?3. Da kommt eine Meldung mit Debuggen.
Nee die kenn ich nicht. Im folgenden Code läuft sich deine Funktion auch tot.
If Not rs.EOF Then rs.MoveFirst
Do While Not rs.EOF
anzahl1 = rs!Feldname
Loop
Gruß L.
also ich möchte das dann so realisieren das wenn ich das Formular auf mache er einen neuen Datensatz öffnet.
Das kann man wohl machen.Könnte man dan nicht zum letzten Datensatz springen?
Klar, aber warum sind dann überhaupt mehrere Datensätze in der Tabelle wenn du nur den letzen nimmst.Aber zurück zu Deiner Funktion:
Mir ist überhaupt nicht klar was die machen soll,
was für informationen in den Tabellen "Toner" und "Tonerauswahl" stehen,
und was das Ziel dieser addition sein/werden soll.
Du schreibst du willst eine "Tonerverwaltung" realisieren. OK, aber das einzige was man mit Toner machen kann ist verbrauchen. Also soll das ein Bestandszähler werden?
Wenn das so ist, wozu dein die 2 tabellen?
Warum nicht nur eine mit den Feldern "Tonertyp" und "Anzahl".
Gib mal ein bisschen mehr konzeptionelle Info.
Gruß L.
Moin
Ok, du brauchst ein Formular in dem 3 Eingaben erfolgen.
1. Tonertyp, 2. TonerAnzahl 3. Abteilung.
Ich tu mal so als würden deine Tabellen so aussehen:
Toner:
Tonerausgabe:
Dann könnte der Code so aussehen (ungetestet):
Gruß L.
Ok, du brauchst ein Formular in dem 3 Eingaben erfolgen.
1. Tonertyp, 2. TonerAnzahl 3. Abteilung.
Ich tu mal so als würden deine Tabellen so aussehen:
Toner:
Tonertyp | Anzahl |
Tonerausgabe:
Abteilung | Tonertyp | Anzahl |
Dann könnte der Code so aussehen (ungetestet):
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String
Set Dbs = CurrentDb
strSQL = "SELECT * FROM Toner WHERE Tonertyp = '" & Me.Tonertyp & "'"
Set rs = db.OpenRecordset(strSQL)
If Not rs.EOF Then
rs.MoveFirst
' Bestand um Anzahl veringern
strSQL = "UPDATE Toner Set Anzahl = " & _
(rs!Anzahl - Me.Anzahl ) & _
& " WHERE Tonertyp = '" & Me.Tonertyp & "';"
DoCmd.RunSQL(strSQL)
end if
StrSQL = "SELECT * FROM Tonerausgabe WHERE Abteilung = '" _
& Me.Abteilung & "' AND Tonertyp = '" Me.Tonertyp & "';"
Set rs = db.OpenRecordset(strSQL)
If Not rs.EOF Then
rs.MoveFirst
' Abteilungszähler um Anzahl erhöhen
strSQL = "UPDATE Tonerausgabe Set Anzahl = " & _
rs!Anzahl - Me.Anzahl ) & _
" WHERE Abteilung = '" & Me.Abteilung & "' AND Tonertyp = '" Me.Tonertyp & "'"
DoCmd.RunSQL(strSQL)
Else ' neuen Zahler anlegen
strSQL = "Insert Into Tonerausgabe (Abteilung, Tonertyp, Anzahl) Values ('" _
& Me.Abteilung & "','" Me.Tonertyp & "', " & (rs!Anzahl - Me.Anzahl ) & ");"
DoCmd.RunSQL(strSQL)
end if
rs.Close
Set rs = Nothing
Set db = Nothing
Gruß L.
Moin Moin
Du hast den Code an deine Tabelle / dein Foprmular angepasst.
Welche Zeile wird beanstandet?
Lässt sich der Code kompilieren?
Noch ein Tipp:
Füge an die Tabelle "Tonerausgabe" ebenfalls ein ID: Autowert Feld an und erkläre dies zum Primerschlüssel.
Gruß L.
irgendwie hat er da noch ein Problem mit ungültigen Zeichen?
Was soll irgendwer mit dieser Aussage anfangen.Du hast den Code an deine Tabelle / dein Foprmular angepasst.
Welche Zeile wird beanstandet?
Lässt sich der Code kompilieren?
Noch ein Tipp:
Füge an die Tabelle "Tonerausgabe" ebenfalls ein ID: Autowert Feld an und erkläre dies zum Primerschlüssel.
Gruß L.
Moin moin
Auf die schnelle sehe ich einen Fehler in Zeile 5.
Besser so:
Das würde auch deinen Fehler erklären (obwohl ich habe gerade fürchterlichen Nebel in meiner Kristallkugel ).
Sollte der Fehler immernoch auftreten kannst du versuchen die Abfragen direkt auszuführen, um festzustellen ob Sie korrekt sind.
Dazu setzt Du dir einen Haltepunkt hinter eine "strSQL=..." Zeile.
Wenn der Code dort stoppt lässt du Dir das SQL statement ausgeben, nachst eine Neue Abfrage und gibst das Statement in der SQL ansicht direkt ein. Und ausführen.
Noch ein Tipp:
Schreibe (immer) oben in deinem Modul
falls das noch nicht der Fall ist.
Gruß L.
Auf die schnelle sehe ich einen Fehler in Zeile 5.
Besser so:
Set db = CurrentDb
Das würde auch deinen Fehler erklären (obwohl ich habe gerade fürchterlichen Nebel in meiner Kristallkugel ).
Sollte der Fehler immernoch auftreten kannst du versuchen die Abfragen direkt auszuführen, um festzustellen ob Sie korrekt sind.
Dazu setzt Du dir einen Haltepunkt hinter eine "strSQL=..." Zeile.
Wenn der Code dort stoppt lässt du Dir das SQL statement ausgeben, nachst eine Neue Abfrage und gibst das Statement in der SQL ansicht direkt ein. Und ausführen.
Noch ein Tipp:
Schreibe (immer) oben in deinem Modul
Option Explicit
Gruß L.