Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Clumsy am November 23, 2021, 15:31:08

Titel: Update Eintrag mit Summe aus anderer Tabelle
Beitrag von: Clumsy am November 23, 2021, 15:31:08
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
Titel: Re: Update Eintrag mit Summe aus anderer Tabelle
Beitrag von: MzKlMu am November 23, 2021, 15:47:54
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.
Titel: Re: Update Eintrag mit Summe aus anderer Tabelle
Beitrag von: Clumsy am November 23, 2021, 18:36:16
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
Titel: Re: Update Eintrag mit Summe aus anderer Tabelle
Beitrag von: MzKlMu am November 23, 2021, 19:39:57
Hallo,
wie erfasst Du die Mengen der Artikel die gekauft werden ?
Wenn Du einen Bestand hast, so brauchst Du Zugänge und Abgänge.
Titel: Re: Update Eintrag mit Summe aus anderer Tabelle
Beitrag von: Clumsy am November 23, 2021, 19:43:55
Für die Eingänge habe ich einfach ein UserForm, in dem der Nutzer die Zahl beliebig ändern kann.
Titel: Re: Update Eintrag mit Summe aus anderer Tabelle
Beitrag von: MzKlMu am November 23, 2021, 20:11:27
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.
Titel: Re: Update Eintrag mit Summe aus anderer Tabelle
Beitrag von: PhilS am November 23, 2021, 20:49:23
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.
Titel: Re: Update Eintrag mit Summe aus anderer Tabelle
Beitrag von: Clumsy am November 23, 2021, 21:10:41
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
Titel: Re: Update Eintrag mit Summe aus anderer Tabelle
Beitrag von: Clumsy am November 23, 2021, 21:13:24
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?
Titel: Re: Update Eintrag mit Summe aus anderer Tabelle
Beitrag von: markusxy am November 24, 2021, 07:35:59
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.
Titel: Re: Update Eintrag mit Summe aus anderer Tabelle
Beitrag von: Clumsy am November 24, 2021, 19:51:44
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.