Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Kombinationsfeld als Suchfeld

Begonnen von ChemSim, März 14, 2024, 16:51:23

⏪ vorheriges - nächstes ⏩

ChemSim

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).

Sie dürfen in diesem Board keine Dateianhänge sehen.

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!

ChemSim

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