Neuigkeiten:

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

Mobiles Hauptmenü

Doppelte M:N Beziehung auslösen

Begonnen von Atuatuca, Juli 07, 2019, 17:03:58

⏪ vorheriges - nächstes ⏩

Beaker s.a.

Hallo Rudi,
Mit deinem Form "frm_BA_1" kannst du die Tabelle "tab_Art_Lfrt_Charge"
füllen; mit den BA hat das nichts zu tun.
Prinzipiell, wenn auch nicht immer, sollte ein Form nur an eine Tabelle
gebunden sein. Deine Abfrage macht keinen Sinn, die Nachschlagetabellen
werden doch in den Kombis verwendet.
Die schrittweise Einschränkung der DS in "tab_Art_Lfrt_Charge" geht daher
nur mit ungebundenen Kombis. Diese beziehen sich alle auf diese Tabelle,
denn da müssen sie drin sein. Sonst gibt es keinen FK für die BA. An diesen
ist dann das Kombi cbo_Charge gebunden.
Habe noch mal dran rumgebastelt. Die von mir geschriebenen Prozeduren
stehen als erste im Modul (frm_BA).
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Atuatuca

Moin Ekkehard,

gucke mir gerade Deine fleiß Arbeit an. Sieht sehr nach meinen Wünschen aus.

2 Sachen sind mir aufgefallen (bei mir Access 2010):

1) wenn das Kombinationsfeld gewechselt wird, dann ist die Eingabe aus dem vorangegangenem Kombinationsfeld nicht mehr sichtbar. Gespeichert sind die Daten. Erst beim Blättern in den Datensätzen sind die eingegebenen / gespeicherten Datensätze sichtbar.
2) wenn alle Kombinationsfelder gefüllt, dann erzeugt er bereits eine neue BA mit einer ID, ebenso bei klicken auf "neuer Datensatz". Ich kenne nur das im ID-Feld "(Neu)" steht.

Habe mir auch den Code zum frm_BA angeguckt, aber ich bin nicht so firm mit VBA und konnte dort nichts finden was o.g. "veranlasst".


Gruss
Rudi.


Beaker s.a.

Hallo Rudi,
Zu 1.
Tausche die beiden Prozeduren aus
Private Sub cbo_Artikel_AfterUpdate()

    Dim sSQL As String
   
    If Me.NewRecord Then
        sSQL = _
              "SELECT DISTINCT ALC.FS_Lfrt, L.LfrtName " _
            & "FROM tab_Lfrt AS L " _
                    & "INNER JOIN tab_Art_Lfrt_Charge AS ALC " _
                    & "ON L.ID_Lfrt = ALC.FS_Lfrt " _
            & "WHERE ALC.FS_Art = " & cbo_Artikel
        Me.cbo_Lieferant.RowSource = sSQL

        Me.txtArtikel = Me.cbo_Artikel.Column(1)    '! hier und ...
        Me.txtf_kurztext = Me.cbo_Artikel.Column(2)
       
    End If
End Sub

Private Sub cbo_Lieferant_AfterUpdate()
   
    Dim sSQL As String
   
    If Me.NewRecord Then
        sSQL = _
              "SELECT ALC.ID_Lfrt_Art, C.Charge " _
            & "FROM tab_Charge AS C " _
                    & "INNER JOIN tab_Art_Lfrt_Charge AS ALC " _
                    & "ON C.ID_Charge = ALC.FS_Charge " _
            & "WHERE ALC.FS_Art = " & Me.cbo_Artikel & " And ALC.FS_Lfrt = " & Me.cbo_Lieferant
   
        Me.cbo_Charge.RowSource = sSQL
       
        Me.txtLieferant = Me.cbo_Lieferant.Column(1)    '... hier
    End If

End Sub


zu 2.
Das wird durch die Zeile
Me.cbo_Charge = Null
ausgelöst, da ein Wert in ein gebundenes Feld geschrieben wird. Ändere die
Zeile wie folgt
Me.cbo_Charge.RowSource = ""

Macht auch eh mehr Sinn, - meine Unzulänglichkeit :-(
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Atuatuca

Moin Ekkehard,

Erstmal vielen Dank für deine Hilfe. Muss es mir später zur Gemüte führen. Mein PC macht zicken :-(

Atuatuca

Moin Ekkehard,

funzt jetzt wunderbar. Wie gewünscht. Du bist der Beste.

Jetzt muss noch eine Routine rein um auch Werte zu ergänzen. Hast Du sicherlich schon erwartet. Habe bei den Ereignissen der Kombinationsfeldern geguckt, aber den regulären Eintrag "Bei nicht in Liste bei cbo_Art und cbo_Lieferant nicht gefunden.Nur bei cbo_Charge gibt es den o.g. Eintrag in der Ereignisliste.

Ich gehe davon aus, dass der code von Dir noch ein "bisschen" ergänzt werden muss für cbo_Art und cbo_Lfrt.

Wenn nicht in Liste (Tabelle) dann öffne frm_Art und nehme den Wert des Feldes/der Felder mit.

Leider weiss ich nur wie das bei dem Ereignis "bei nicht in liste" funktioniert, aber nicht bei dem SQL -code bei Laden des frm_BA.



Gruss
Rudi




Beaker s.a.

Hallo Rudi,
Das macht auf diesem Form keinen Sinn. In diesem Form werden "Bean-
standungen" erfasst und sonst nichts.
Es wird doch wohl beim Wareneingang zunächst der Artikel mit Charge und
Lieferant erfasst, und erst dann, wenn überhaupt, eine Beanstandung zu eben
dieser Charge. Wie willst du sonst den FK in die Beanstandung bekommen?
Um also die Chargen zu erfassen, brauchst ein eigenes Formular, das an die
Tabelle "tab_Art_Lfrt_Charge" gebunden ist. Da kannst du dann die drei Kombis
mit einem "NotInList"-Ereignis ausstatten.
Von diesem Form aus könntest du auch gleich das Form BA mit einem neuen
DS öffnen und den FK für Art/Lfrt/Charge übergeben, und müsstest nur noch
Bestellung und Lieferschein ergänzen.
Wobei an dieser Stelle eine Riesenlücke im Datenmodell klafft. Es gibt keine
Beziehung zwischen Bestellung und Lieferschein sowie keine zwischen Liefer-
schein und den Artikeln, - somit kein Zusammenhang zwischen Lieferschein
und Beanstandung. Du kannst also eine BA anlegen zu einer Charge, deren
Artikel gar nicht auf dem ausgewählten Lieferschein steht.
Musst du mal drüber nachdenken.

gruss ekkhard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Atuatuca

Moin Ekkehard,

es soll über ein zusätzliches Formular laufen (frm_Art), wo Artikel, Charge und Lieferant gepflegt werden.

Wenn ein Artikel, eine Charge oder Lieferant als Kombination nicht in der tab_ALC ist, dann soll er frm_Art
öffnen und die bereits gemachten Angaben mit übertragen in frm_Art.

Das es eine Datenlücke gibt, ist mir durchaus bewusst, aber da wir kein Qualitäts-Modul für unser ERP-System haben, wollen wir uns mit meiner DB behelfen.

Die Mitarbeiter in unsere Qualitätssicherung füllen aktuell ein Word-Dokument aus, ohne jeglich Beziehungen irgend wo hin. Also die größt möglich Datenlücke die es gibt.

Ausserdem soll über meine DB auch noch die Ausschussware erfasst werden und dem Lieferanten berechnet werden.

Franz hatte mir kürzlich schon mit der Übergabe an anderes Formular geholfen mit "OpenArgs". Kann aber mein Beitrag gerade nicht finden.

Gruss
Rudi

Beaker s.a.

Hallo Rudi,
Sorry, fällt mir heute nichts mehr dazu ein, - muss jetzt Feierabend machen.
Morgen bin ich ausser Haus, weiss aber nicht wie lange. Überlege mir was
wenn's passt.
gruss ekkehard

@Klaus
Falls du Lust und Zeit magst du vielleicht einspringen. Ich halte das Vorgehen
für falsch, aber wohl machbar.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)