Liebe Community, ich habe folgende Problematik:
Wenn ein oder mehrere Einträge aus der Tabelle "tbl_VorgangArtikel" gelöscht werden, soll sich in der Tabelle "tbl_Artikel" das Feld "Bestand" um den Wert aus "tbl_VorgangArtikel.Anzahl" erhöhen.
Die Tabelle "tbl_Artikel" speichert alle Artikel eines Unternehmens.
In der Tabelle "tbl_VorgangArtikel" sind alle Verkäufe gespeichert inkl. einer Referenz zu dem tatsächlichen Angebot/Rechnung in einer separaten Tabelle.
Meine Herangehensweise wäre zuerst alle Bestände in "tbl_Artikel" zu aktualisieren und in einer zweiten Abfrage die jeweiligen Einträge in "tbl_VorgangArtikel" zu löschen. Ich hänge nur beim ersten Teil.
Folgendes funktioniert nicht (hab ja auch ich gebaut^^):
UPDATE tbl_Artikel SET tbl_Artikel.Bestand = tbl_Artikel.Bestand +
(SELECT Sum(tbl_VorgangArtikel.Anzahl)
FROM tbl_VorgangArtikel
WHERE tbl_VorgangArtikel.IDArtikel=tbl_Artikel.ID
GROUP BY tbl_VorgangArtikel.IDArtikel)
WHERE tbl_Artikel.ID IN (157,158)
Herzlichen Dank für jede Unterstützung!
Mfg Flo
Hallo,
das Vorhaben ist so ungeignet. Man speichert im Regelfall keine Bestände.
Wenn du mit der Tabelle tbl_VorgangArtikel eine Abfrage erstellst die über die Artikel gruppierst und die Anzahl summierst hast Du automatisch die geleiferten Mengen eines Artikel.
Wenn Du jetzt noch eine extra Tabelle anlegst, in der auch die nachbestellten Mengen auf die geliche Art ermittelt werden, kannst Du mit beiden Abfragen stets den aktuellen Bestand ermitteln.
Hi Klaus, vielen Dank für deine Nachricht.
Der Bestand wird manuell angelegt, weshalb er noch irgendwo festgehalten werden muss. Dafür alleine würde ich ungern eine neue Tabelle anlegen.
Auch würde ich (selbst wenn es ungeeignet ist) gerne wissen, was ich falsch mache, einfach um daran zu lernen.
VG Flo
Hallo,
wie erfasst Du die Mengen der Artikel die gekauft werden ?
Wenn Du einen Bestand hast, so brauchst Du Zugänge und Abgänge.
Für die Eingänge habe ich einfach ein UserForm, in dem der Nutzer die Zahl beliebig ändern kann.
Hallo,
UserForm gibt es bei Access nicht. Da gibt es Access Formulare. UserForm ist Excel.
Wo wird denn der Eingang gespeichert in welcher Tabelle? Ein Formular kann ja nichts speichern.
Zeige mal ein Bild des Beziehungsfensters. Beziehungen sind ja hoffentlich angelegt.
Zitat von: MzKlMu am November 23, 2021, 20:11:27UserForm gibt es bei Access nicht. Da gibt es Access Formulare. UserForm ist Excel.
Wo es VBA gibt, gibt es auch UserForms.
Public Sub UserFormTest()
Const vbext_ct_MSForm = 3
Dim uf As Object
Set uf = Application.VBE.ActiveVBProject.VBComponents.Add(vbext_ct_MSForm)
With uf
.Properties("Width") = 500
.Properties("Height") = 150
End With
Dim ctl As Object
Set ctl = uf.Designer.Controls.Add("Forms.Label.1")
With ctl
.Name = "MyLabel"
.Top = 25
.Left = 25
.Width = 400
.Height = 100
.Caption = "'Hallo, Welt!' sagt das UserForm. ;-)"
.Font.Size = 24
End With
VBA.UserForms.Add(uf.Name).Show
End Sub
QED! :-)
Nachdem ich jetzt alle Erbsen gezählt habe, möchte ich noch anmerken:
@MzKlMu hat natürlich im Wesentlichen völlig recht. UserForms werden in Access üblicherweise nicht verwendet. Da es sie aber dennoch gibt, sollte man umso mehr darauf achten, den Begriff nicht falsch zu verwenden.
Oh ja, ich spreche auch von einem UserForm in Excel. Dachte nicht, dass das von Relevanz ist.
Ich verwende Excel zum Darstellen und Interagieren mit den Daten.
Die SQL Befehle führe im VBA Code ich wie folgt aus.
DBconn.Execute strsql
Auch wenn es sicher elegantere Wege gibt, würde ich so gerne wissen, worin der Fehler in meiner SQL-Abfrage liegt.
Ich habe die einzelnen Bestandteile (Eintrag überschreiben und Summe bilden) einzeln getestet und es funktioniert wunderbar. Warum kann ich es nicht einfach aneinander knüpfen?
Zitat von: Clumsy am November 23, 2021, 21:13:24Auch wenn es sicher elegantere Wege gibt, würde ich so gerne wissen, worin der Fehler in meiner SQL-Abfrage liegt.
Da gibt es keinen echten Fehler.
Höchstens einen Schönheitsfehler -> nach einem Wert filtern und gleichzeitig gruppieren bringt natürlich nichts.
Access streikt bei Aktualisierungen wenn im Select/Subselect eine Aggregierungsfunktion verwendet wird.
Man muss das also irgendwie umgehen.
Bei Access verwendet man in der Regel anstatt dem Subselect die DSum Funktion.
Aber wie schon erwähnt, wird man soweit sinnvoll die Summe nicht speichern, sondern nur anzeigen.
Natürlich gibt es genug Fälle, wo man auch Summen speichern wird.
Hi Markus, vielen Dank für deine Antwort.
Dann liegt es wohl daran, dass Access in einer Update-Abfrage keine Summe bilden kann? Oder so in der Art, wobei ich nicht verstehe, warum...
Ich habe mich nun damit abgefunden.
Die Tatsache, dass ich nichts speichere, was berechnet werden kann, nehme ich auf jeden Fall mit. Danke.