Hallo zusammen,
in meiner MS Access Datenbank habe ich ein Formular frmHerstellerBearbeiten, auf dem ich ein ungebundenes Kombinationsfeld als Suchfeld eingebaut habe, welches über die SQL-Abfrage
SELECT tblHersteller.HerstellerID, tblHersteller.Firmenname FROM tblHersteller ORDER BY tblHersteller.Firmenname;
auf die Tabelle tblHersteller als Datensatzherkunft zugreift. Zudem hat es das Ereignis "Nach Aktualisierung":
Private Sub cboHerstellerSuchen_AfterUpdate()
DoCmd.OpenForm "frmAnlagen", acFormDS, , "HerstellerID_F = " & Me.cboHerstellerSuchen
End Sub
wobei man nach Auswahl eines Herstellers auf das Formular frmAnlagen geleitet wird, welches die Anlagen nach dem ausgewählten Hersteller in der Datenblattansicht anzeigt.
Das funktioniert auch soweit ganz gut. Jetzt habe ich aber noch das Formular frmKonzerneBearbeiten, welches ebenfalls ein Kombinationsfeld (Suchfeld) erhalten soll, mit dem ich die Datensätze in der Tabelle tblAnlagen nach dem Konzernnamen filtern kann. Jeder Hersteller in der Tabelle tblHersteller ist dabei über die Tabelle tblEigentümer mit der Tabelle tblKonzerne verknüpft. Dabei ist jeder Hersteller einem oder mehreren Konzernen zugeordnet (je nachdem, ob es sich um ein 100 %-iges Tochterunternehmen handelt oder ein Gemeinschaftsunternehmen von mehreren Konzernen).
Screenshot 2024-03-14 164432.png
Das Formular frmAnlagen, welches in der Datenblattansicht geöffnet wird, ist dabei mit der Tabelle tblAnlagen als Datensatzquelle verknüpft. In dieser Tabelle gibt es allerdings nur das Feld HerstellerID_F und keinen direkten Fremdschlüssel zur KonzernID.
Wie kann ich es dennoch schaffen, in dem ungebundenem Kombinationsfeld im Formular frmKonzerneBearbeiten einen Konzern auszuwählen, wobei mir dann alle Anlagen dieses Konzerns angezeigt werden, auch wenn der ausgewählte Konzern nur z. B. zu 50 % an dem jeweiligen Hersteller beteiligt ist?
Einen angepasst VBA-Code wie
Private Sub cboKonzernSuchen_AfterUpdate()
DoCmd.OpenForm "frmAnlagen", acFormDS, , "KonzernID-F = " & Me.cboKonzernSuchen
End Sub
Kann ich nicht verwenden, da im Formular frmAnlagen nicht direkt die KonzernID verknüpft ist, nur die HerstellerID.
Bitte um Hilfe!
EDIT:
Ich habe es über folgenden Code bereits selbst geschafft:
Private Sub cboAnlagenNachKonzernSuchen_AfterUpdate()
'KonzernID aus dem ausgewählten Eintrag im Kombinationsfeld erhalten
Dim selectedKonzernID As Long
selectedKonzernID = Nz(Me.cboAnlagenNachKonzernSuchen.Value, 0) ' Falls keine Auswahl getroffen wurde, wird 0 zurückgegeben
' Abfrage, um die HerstellerIDs für den ausgewählten Konzern zu erhalten
Dim strSQL As String
strSQL = "SELECT tblEigentümer.ProduzentID_F " & _
"FROM tblEigentümer " & _
"WHERE tblEigentümer.KonzernID_F = " & selectedKonzernID
' Aufzeichnungssatz für die HerstellerIDs des ausgewählten Konzerns öffnen
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset(strSQL)
' Prüfen, ob das Recordset nicht leer ist
If Not rs.EOF Then
' AnlagenIDs für die gefundenen HerstellerIDs sammeln
Dim strHerstellerIDs As String
rs.MoveFirst ' Auf den ersten Datensatz setzen
Do While Not rs.EOF
strHerstellerIDs = strHerstellerIDs & rs("ProduzentID_F") & ","
rs.MoveNext
Loop
' Entfernen des letzten Kommas
If Len(strHerstellerIDs) > 0 Then
strHerstellerIDs = Left(strHerstellerIDs, Len(strHerstellerIDs) - 1)
End If
' Formular "frmAnlagen" öffnen und die Anlagen des ausgewählten Konzerns anzeigen
DoCmd.OpenForm "frmAnlagen", , , "ProduzentID_F IN (" & strHerstellerIDs & ")"
Else
' Wenn das Recordset leer ist, eine Meldung ausgeben
MsgBox "Keine Hersteller für diesen Konzern gefunden."
End If
' Recordset schließen
rs.Close
Set rs = Nothing
End Sub