Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Aktualisierungsabfrage eines Unterformulars Warenkorb
zurück: Datenanzeige in Abhängigkeit zweier Kombinationsfelder weiter: Problem mit Kombinationsfeld Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Antwort Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Gajov
Gast


Verfasst am:
20. Jul 2009, 19:08
Rufname:

Aktualisierungsabfrage eines Unterformulars Warenkorb - Aktualisierungsabfrage eines Unterformulars Warenkorb

Nach oben
       Version: Office 2007

Hallo erstmal,

ich habe ein kleines Problem mit einer Aktualisierungsabfrage eines Unterformulars Warenkorb das sich in einem Formular Angebote befindet.

Mein Wunsch wäre es über einen Button 'RechnungErstellen' die ausgewählten Artikel mit den dazugehörigen Artikelanzahl von der Tabelle Artikel den Lagerbestand zu aktualisieren.
Ich habe einen Ansatz gefunden. Nur leider funktioniert dieser nicht fehlerfrei.
Mein Ansatz:
Code:
Private Sub RechnungErstellen_Click()
    Dim rs As Object
    Dim aktId As Long
   
    aktId = Me![AngebotsID]
    Me.Requery              ' Aenderung der Datensaetze mit Requery
    Me.Recordset.FindFirst "[AngebotsID] = " & aktId
    If Me.Recordset.NoMatch Then
        MsgBox "Der DS mit " & aktId & " ist nicht mehr da"
    End If
    DoCmd.OpenQuery "qryAktualisierenLagerbestand", acViewNormal, acEdit
End Sub
Die Aktualisierungsabfrag "qryAktualisierenLagerbestand" beinhaltet folgende Angaben:

Feld: Lagerbestand, Tabelle: Artikel
Aktualisieren: [Lagerbestand]-[Forms]![Angebote]![Warenkorb]![Artikelanzahl]

Feld: AngebotsId, Tabelle: Warenkorb
Kriterien: [Forms]![Angebote]![AngebotsID]

Mit diesem Ansatz zieht er mir für die jeweiligen Artikel des Warenkorbs aber immer nur die Artikelanzahl des ersten Artikel für jeweils jeden Artikel des Warenkorbs. Also wenn artikel1 = 1Artikelanzahl und artikel2 = 2Artikelanzahl ...
dann zieht er für beide jeweils ein Artikel vom Lagerbestand ab. Das ist natürlich flasch.

Ich bin für jede hilfe und eventuell anderen Ansatz dankbar!
MissPh!
Office-VBA-Programmiererin


Verfasst am:
20. Jul 2009, 20:46
Rufname:
Wohnort: NRW


AW: Aktualisierungsabfrage eines Unterformulars Warenkorb - AW: Aktualisierungsabfrage eines Unterformulars Warenkorb

Nach oben
       Version: Office 2007

Hallo,
du musst die Artikel im Unterformular ("Warenkorb") per Schleife über das Recordset auslesen, einzeln prüfen und abbuchen. Auch das Abbuchen könnte sinnvollerweise über ein Recordset laufen, dann kannst du damit auch gleich das Vorhandensein prüfen.
Beispiel:
Code:
Private Sub RechnungErstellen_Click()
    Dim rsA As DAO.Recordset, rsB As DAO.Recordset
    Dim aktId As Long
   
    aktId = Me![AngebotsID]
    Me.Requery                         ' Aenderung der Datensaetze mit Requery
    ' Warenkorb = Abgang
    Set rsA = Me.Recordset
    ' Artikel = Bestand
    Set rsB = CurrentDb.OpenRecordset("Artikel", dbOpenDynaset)
    Do While Not rsA.EOF
        rsB.FindFirst "ArtikelID = " & rsA!ArtikelID
        If rsB.NoMatch Then
            MsgBox "kein Bestand"
            rsA.Edit
            rsA!Fehler = True
            rsA.Update
          ElseIf rsB!Lagerbestand < rsA!Artikelanzahl Then
            MsgBox "Bestand reicht nicht aus"
            rsA.Edit
            rsA!Fehler = True
            rsA.Update
          Else
            rsB.Edit
            rsB!Lagerbestand = rsB!Lagerbestand - rsA!Artikelanzahl
            rsB.Update
        End If
        rsA.MoveNext
    Loop
    rsB.Close
    Set rsA = Nothing
End Sub

_________________
Gruß MissPh!
Gajov
Gast


Verfasst am:
20. Jul 2009, 22:02
Rufname:

AW: Aktualisierungsabfrage eines Unterformulars Warenkorb - AW: Aktualisierungsabfrage eines Unterformulars Warenkorb

Nach oben
       Version: Office 2007

Vielen Dank für die schnelle antwort. Ich habe aber leider noch ein kleines prob. mit der schreibweise des Recordset.

An der Stelle:
Code:
        rsB.FindFirst "ArtikelID = " & rsA!ArtikelId
Geht der Debugg-Modus auf und sagt
Zitat:
Element in dieser Auflistung nicht gefunden.
Laufzeitfehler '3265'
ich glaube das bei Set rsA = Me.Recordset das Unterformular des Warenkorbs nicht richtig aufgerufen wird.

Meine Tabellen sind in etwa so aufgebaut:

Tabelle: ARTIKEL
Felder: ArtikelID, ArtikelNr , ..., Lagerbestand

Tabelle: WARENKORB
Felder: ArtikelId, AngebotsId , ..., Artikelanzahl

Tabelle: ANGEBOTE
Felder: AngebotsId , AngebotsNr, ..., usw.

Die Tabelle Warenkorb stellt die Beziehungstabelle zwischen Artikel und Angebot.
Im Formular Angebote ist das Unterformular Warenkorb eingebunden.
Daraus sollten die Daten geladen werden.

Vielen Dank für die Hilfe!
MissPh!
Office-VBA-Programmiererin


Verfasst am:
20. Jul 2009, 22:19
Rufname:
Wohnort: NRW

AW: Aktualisierungsabfrage eines Unterformulars Warenkorb - AW: Aktualisierungsabfrage eines Unterformulars Warenkorb

Nach oben
       Version: Office 2007

Das verstehe ich jetzt nicht. Wie du sagst, gibt es die ArtikelID sowohl in Tabelle "Artikel" als auch in der Tabelle "Warenkorb".

Nach meinem Verständnis sollte rsA auf der Tabelle "Warenkorb" bzw. der Datenherkunft des Unterformulars basieren.

_________________
Gruß MissPh!
Gast



Verfasst am:
20. Jul 2009, 22:54
Rufname:


AW: Aktualisierungsabfrage eines Unterformulars Warenkorb - AW: Aktualisierungsabfrage eines Unterformulars Warenkorb

Nach oben
       Version: Office 2007

Ich habe das jetzt folgendermaßen gelößt:
Code:
    Dim rsA As DAO.Recordset, rsB As DAO.Recordset
    Dim aktId As Long
   
    aktId = Me![AngebotsID]
    Me.Requery              ' Aenderung der Datensaetze mit Requery
    Me.Recordset.FindFirst "[AngebotsID] = " & aktId
    Set rsA = Me.Warenkorb.Form.Recordset
    '...usw
Habe aber noch die Sache mit der Fehlerbehandlung.
Wenn ein Lagerbestand nicht ausreicht fliegt er aus der Schleife zum Debugg-Modus raus.
Besser wäre es das die Eingabe korigiert werden könnte und den Restbestand anzeigt oder übernimmt.
MissPh!
Office-VBA-Programmiererin


Verfasst am:
20. Jul 2009, 23:09
Rufname:
Wohnort: NRW

Re: AW: Aktualisierungsabfrage eines Unterformulars Warenkor - Re: AW: Aktualisierungsabfrage eines Unterformulars Warenkor

Nach oben
       Version: Office 2007

Ich verstehe nicht, was du damit sagen willst. Der folgende Code ist IMHO ziemlich sinnfrei
Code:
    aktId = Me![AngebotsID]
    '...
    Me.Recordset.FindFirst "[AngebotsID] = " & aktId
bzw. in welchem Zusammenhang steht das zum nachfolgenden Code?

Und worauf bezieht sich dies:
Zitat:
Habe aber noch die Sache mit der Fehlerbehandlung.
Wenn ein Lagerbestand nicht ausreicht fliegt er aus der Schleife zum Debugg-Modus raus.
An welcher Stelle passiert das? Zeige bitte den Code dazu.

Zitat:
Besser wäre es das die Eingabe korigiert werden könnte und den Restbestand anzeigt oder übernimmt.
Dazu war das Fehler-Kennzeichen gedacht...

Ein wenig Mitdenken und Nachfragen und nicht blind Übernehmen setze ich schon voraus... ;)

_________________
Gruß MissPh!
Gajov
Gast


Verfasst am:
22. Jul 2009, 11:51
Rufname:

AW: Aktualisierungsabfrage eines Unterformulars Warenkorb - AW: Aktualisierungsabfrage eines Unterformulars Warenkorb

Nach oben
       Version: Office 2007

Danke für deine Hilfestellung.

Du hast Recht. Den ersten Teil brauch ich nicht mehr.
Ich hatte bei meiner ersten Lösung das Problem das ich das Angebots-Formular neu laden musste, damit die Werte des Unterformulars übernommen werden konnten wenn ein neuer Datensatz erzeugt wurde. Dies ist jetzt dem nicht mehr so.

Ich habe aber noch ein verständniss problem wie ich das Recordset für rsA wieder an den anfangen setzen kann, wenn ich mehrer Angebote aktualisieren müöchte. Ich habe es erstmal folgendermaßen gelößt, was meiner Meinung nach nicht ganz schön ist:
Code:
    Dim rsA As DAO.Recordset, rsB As DAO.Recordset, rsC As DAO.Recordset

    ' Warenkorb = Abgang
    Set rsA = Me.Warenkorb.Form.Recordset
    ' Artikel = Bestand
    Set rsC = rsA.Clone
    Set rsB = CurrentDb.OpenRecordset("Artikel", dbOpenDynaset)
    Do While Not rsC.EOF
        rsB.FindFirst "[ArtikelID] = " & rsC!ArtikelId
        If rsB.NoMatch Then
            MsgBox "kein Bestand"
            rsC.Edit
            rsC!Fehler = True
            rsC.Update
          ElseIf rsB!Lagerbestand < rsC!Artikelanzahl Then
            MsgBox "Bestand bei Artikel " & rsC!ArtikelId & _
                   "reicht nicht aus! Maximale Menge ist " & rsB!Lagerbestand
            rsC.Edit
            'rsC!Fehler = True
            rsC.Update
          Else
            rsB.Edit
            rsB!Lagerbestand = rsB!Lagerbestand - rsC!Artikelanzahl
            rsB.Update
        End If
        rsC.MoveNext
    Loop
    rsB.Close
    Set rsC = Nothing
Das mit dem rsA!Fehler = True weiß ich nicht genau anzuwenden?
Ich würde es eben in etwa so haben das ein weiteres Formular sich öffnet womit ich dann die Menge anhand des vorhanden Lagerbestands aktualisieren kann oder den Artikel komplett entferne.

Wenn das nicht geht dann sollen die gesamten Artikelanzahlen rückgängig gemacht werden und das Angebot erstmal berichtigen.

Vielen Dank für die Tipps und Hilfe!
MissPh!
Office-VBA-Programmiererin


Verfasst am:
22. Jul 2009, 12:16
Rufname:
Wohnort: NRW

AW: Aktualisierungsabfrage eines Unterformulars Warenkorb - AW: Aktualisierungsabfrage eines Unterformulars Warenkorb

Nach oben
       Version: Office 2007

Hallo,

wozu hast du jetzt RSC eingeführt?

Die Sache mit RSA!Fehler setzt voraus, dass es das Datenfeld in der Tabelle Warenkorb gibt.
Das war nur so eine Idee von mir. Wenn du die Fehler direkt bereinigen möchtest, geht das natürlich auch.
Dann musst du den Code folgendermaßen erweitern:
Code:
          ElseIf rsB!Lagerbestand < rsC!Artikelanzahl Then
            If MsgBox("Bestand bei Artikel " & rsC!ArtikelId & "reicht " & _
                      "nicht aus! " & vbCrLf & "Maximale Menge ist " & _
                      rsB!Lagerbestand & vbCrLf & "Bestellmenge " & _
                      "reduzieren (JA) oder Artikel löschen?", _
                      vbYesNo) = vbYes Then
                rsC.Edit
                rsC!Artikelanzahl = rsB!Lagerbestand
                rsC.Update
                rsB.Edit
                rsB!Lagerbestand = rsB!Lagerbestand - rsC!Artikelanzahl
                rsB.Update
              Else
                rsC.Delete
                rsC.Update
            End If
          Else

_________________
Gruß MissPh!
Gajov
Gast


Verfasst am:
22. Jul 2009, 13:04
Rufname:

AW: Aktualisierungsabfrage eines Unterformulars Warenkorb - AW: Aktualisierungsabfrage eines Unterformulars Warenkorb

Nach oben
       Version: Office 2007

Hallo,

ich habe rsC eingeführt, da ich mich beim ersten durchlaufen mich am ende des Recordset rsA befand und wenn ich ein weiteres Angebot mit anderen Artikel den Lagerbestand aktualisieren wollte diesen wegen nicht vorhandenen Datensätze an
Code:
        rsB.FindFirst "[ArtikelID] = " & rsA!ArtikelId
Der Code abgebrochen wurde. Ich könnte dieses umgehen wenn rsA ans anfang zurück gesetzt würde. Habe dieses aber nicht als Syntax schreibweise hinbekommen und das ganze mit einer Copy von rsA zu rsC umgangen. Ich hatte es mit rsA.MoveFirst am ende versucht aber das hat leider nicht geklappt. Falls andere Möglichkeiten bestehen? würde ich diese auch anwenden!
Hab dein anderen Code mir angesehen und getestet. Dieser ist sehr gut.
Nur an der Stelle
Code:
              Else
                rsC.Delete
                rsC.Update                               'Abbruch durch Debug:
                 'LFehler 3020, Update oder CancelUpdate ohne AddNew oder Edit
Ich glaub ich muss diesen Update direkt am Unterformular Warenkorb durchführen und diesen Refreshen oder verstehe ich da etwas falsch?
MissPh!
Office-VBA-Programmiererin


Verfasst am:
22. Jul 2009, 13:08
Rufname:
Wohnort: NRW

AW: Aktualisierungsabfrage eines Unterformulars Warenkorb - AW: Aktualisierungsabfrage eines Unterformulars Warenkorb

Nach oben
       Version: Office 2007

Nein, das war mein Fehler, Delete geht ohne Update.
_________________
Gruß MissPh!
Gajov
Gast


Verfasst am:
22. Jul 2009, 18:31
Rufname:

AW: Aktualisierungsabfrage eines Unterformulars Warenkorb - AW: Aktualisierungsabfrage eines Unterformulars Warenkorb

Nach oben
       Version: Office 2007

Hallo nochmal,

vielen Dank für die Hilfe. Hat mich weiter gebracht das ganze!

Habe aber eine Frage zu Recordset.
Wie kann ich am Ende der Schleife den Recordset des Unterformulars zum Anfang setzen. D.h. das bei einer weiteren Ausführung die Artikel wieder von oben nach unten verglichen werden?
Code:
    Loop
    rsB.Close
    Set rsC = Nothing
Wie kann ich das an dieser Stelle realisieren?
MissPh!
Office-VBA-Programmiererin


Verfasst am:
22. Jul 2009, 18:48
Rufname:
Wohnort: NRW

AW: Aktualisierungsabfrage eines Unterformulars Warenkorb - AW: Aktualisierungsabfrage eines Unterformulars Warenkorb

Nach oben
       Version: Office 2007

Willst du damit sagen, dass trotz des Clonens der Datensatzzeiger im Ufo, also in rsA, mitwandert?

Hier sollte ein
Code:
    rsA.MoveFirst
' helfen bzw. direkt
    Me!Warenkorb.Form.Recordset.MoveFirst
Mit dieser (Er)Kenntnis könntest du evtl. doch noch auf rsC verzichten...
_________________
Gruß MissPh!
Willi Wipp
Moderator


Verfasst am:
25. Jul 2009, 05:54
Rufname:
Wohnort: Raum Wiesbaden


Re: Aktualisierungsabfrage eines Unterformulars Warenkorb - Re: Aktualisierungsabfrage eines Unterformulars Warenkorb

Nach oben
       Version: Office 2007

Hi Ihr Zwie,

eine grundsaetzliche Anmerkung:
In einem Relationalen DB-System werden in der Regel keine Bestaende, sondern nur Bewegungen erfasst.
Die Bestaende lassen sich dann jederzeit ueber entsprechende Abfrage ermitteln und sind so immer aktuelle!
Das Hauptproblem bei den Bestands-Angaben, wenn sie gespeichert werden:
Welchen Stand spiegeln sie wirklich wieder?
Wurden eventuell versehentlich Aktualisierungsabfragen etc. doppelt ausgeführt?
...

_________________
Eine kurze Rueckmeldung waere nett
SL Willi Wipp

(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Programmierung / VBA: Requery zum Aktualisieren eines Unterformulars tuts nicht 4 cheeZy 403 06. Jul 2012, 12:59
cheeZy Requery zum Aktualisieren eines Unterformulars tuts nicht
Keine neuen Beiträge Access Programmierung / VBA: Welches Ereignis beim Verlassen eine Unterformulars 10 JMalberg 611 10. Jul 2011, 12:02
JMalberg Welches Ereignis beim Verlassen eine Unterformulars
Keine neuen Beiträge Access Formulare: Hauptformular beim Schließen des Unterformulars aktualisiere 2 nimenn 507 16. Jun 2011, 17:19
nimenn Hauptformular beim Schließen des Unterformulars aktualisiere
Keine neuen Beiträge Access Programmierung / VBA: probleme mit darstellung eines unterformulars 7 Gast 202 28. März 2011, 16:37
MissPh! probleme mit darstellung eines unterformulars
Keine neuen Beiträge Access Programmierung / VBA: Auswahl des Unterformulars aufheben 2 Pumpeline 198 22. Nov 2010, 18:05
Gast Auswahl des Unterformulars aufheben
Keine neuen Beiträge Access Formulare: dynamische Größenänderung eines Unterformulars 5 ether28 1675 19. Sep 2010, 08:19
ether28 dynamische Größenänderung eines Unterformulars
Keine neuen Beiträge Access Formulare: Formularfuß des Unterformulars wird nicht angezeigt 7 KingCurrywurst 1430 30. Apr 2010, 13:33
GuyIncognito Formularfuß des Unterformulars wird nicht angezeigt
Keine neuen Beiträge Access Formulare: Filterung eines Unterformulars 0 Gast 293 17. Jun 2009, 15:59
Gast Filterung eines Unterformulars
Keine neuen Beiträge Access Formulare: Aktualisierung aller Datensätze eines Unterformulars 1 marjea 303 17. Mai 2009, 16:22
Marmeladenglas Aktualisierung aller Datensätze eines Unterformulars
Keine neuen Beiträge Access Formulare: Fehler beim Verlassen des Unterformulars 5 Machnik 293 10. Dez 2008, 15:52
Nouba Fehler beim Verlassen des Unterformulars
Keine neuen Beiträge Access Formulare: Datenveränderung bei Sortierung eines Unterformulars?! 8 flowsnrp 292 11. Nov 2008, 09:43
Else_Eifrig Datenveränderung bei Sortierung eines Unterformulars?!
Keine neuen Beiträge Access Programmierung / VBA: Export Inhalt eines Unterformulars nach Excel 9 AchimDuisburg 809 15. Jul 2008, 14:59
rantz Export Inhalt eines Unterformulars nach Excel
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: HTML CSS