Dezember 07, 2021, 13:58:49

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Update Eintrag mit Summe aus anderer Tabelle

Begonnen von Clumsy, November 23, 2021, 15:31:08

⏪ vorheriges - nächstes ⏩

Clumsy

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

MzKlMu

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.
Gruß
Klaus

Clumsy

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

MzKlMu

Hallo,
wie erfasst Du die Mengen der Artikel die gekauft werden ?
Wenn Du einen Bestand hast, so brauchst Du Zugänge und Abgänge.
Gruß
Klaus

Clumsy

Für die Eingänge habe ich einfach ein UserForm, in dem der Nutzer die Zahl beliebig ändern kann.

MzKlMu

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.
Gruß
Klaus

PhilS

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.
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

Clumsy

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

Clumsy

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?

markus888

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.
10 Jahre Access

Clumsy

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.