none
Unterforumular aus formopen filtern

    Frage

  • Hallo

    ich habe ein Endlosformular. Über eine Schaltfläche des jeweiligen Datensatzes rufe ich ein weiteres Formular auf. Hier im Beispiel "FoDetail". In diesem Formular steckt ein Unterformular und dieses Unterformular möchte ich filtern.

    Hier das Event aus dem Endlosformular

    Private Sub sfDetail_Click()
        Dim stDocName As String
        Dim strWhere As String
        strWhere = "[kursid]=" & Me.TfKursNr
        stDocName = "FoDetail"
        DoCmd.OpenForm stDocName, , , strWhere, , , "liste"
    End Sub

    Wie kann ich den Filter an das Unterformular übergeben? Der Filter wird ja direkt über openForm übergeben.

    Hat jemand eine Idee?

    Ich habe auch schon gesucht und folgendes in das Form_load Event des Hauptformulars eingefügt. Aber es funktioniert nicht.
        Me!foDetailsKursid.Form.filter = Me.filter
        Me!foDetailsKursid.Form.FilterOn = True


    Liebe Grüße, die Luzie!

    Dienstag, 6. Oktober 2015 14:56

Antworten

Alle Antworten

  • Und wenn du das in das Form_Open Event setzt?

    Matthias Kläy, Kläy Computing AG

    • Als Antwort markiert Luzie Donnerstag, 8. Oktober 2015 07:01
    Mittwoch, 7. Oktober 2015 10:48
  • Hallo Matthias,

    danke für die Antwort.

    Muss ich mal probieren.

    Ich habe es aber jetzt doch ganz anderes gemacht und zwar das Unterformular entfernt und dafür eine Liste ins Hauptformular eingefügt. Den Parameter dann mit openArgs übergeben.


    Liebe Grüße, die Luzie!

    Donnerstag, 8. Oktober 2015 07:01
  • Hallo Luzie,

    schön zu hören, dass Du eine Lösung gefunden hast.

    Schau Dir bitte trotzdem in der Hilfe noch einmal die Beschreibungen zu den Ereignisse Beim Laden und Beim Öffnen näher an. Es gibt dort einen Unterschied.

    Beim Öffnen
    Bei Formularen tritt das Open-Ereignis beim Öffnen eines Formulars ein, jedoch bevor der erste Datensatz angezeigt wird.

    Beim Laden
    Das Load-Ereignis tritt ein, wenn ein Formular geöffnet wird und seine Datensätze angezeigt werden.

    Das Wissen um diese Unterschiede ist hilfreich wenn es darum geht, dass richtige Ereignis für eine Aktion zu finden.

    CU


    Thomas@Team-Moeller.de
    Blog: Blog.Team-Moeller.de
    Homepage: www.Team-Moeller.de




    Samstag, 10. Oktober 2015 11:26
  • Hallo Thomas,

    in meinem Fall war, wie ich schon beschrieben habe, das Unterformular überflüssig, da es mir wirklich nur und das Anzeigen der Datensätze ging und um das Löschen.

    Aber trotzdem, dass Datensätze eines Unterformulars über docmd.openform eines 3. Formulars gefiltert werden sollen, kann durchaus auch mal vorkommen. Deshalb habe ich es jetzt doch nochmals probiert, bzw. den alten Zustand wieder hergestellt und die Befehle in das Form_open des Hauptformulars eingebaut.

    Ich habe den Filter-Aufruf (strWhere) in das aufrufende Formular eingebaut

    Private Sub sfDetail_Click()
        Dim stDocName As String
        Dim strWhere As String
        strWhere = "[kursid]=" & Me.TfKursNr
        stDocName = "FoDetail"
        DoCmd.OpenForm stDocName, , , strWhere, , , Me.TfKursNr
    End Sub


    Im Hauptformular "FoDetail" habe ich dies in das Form_open-Event geschrieben

    Private Sub Form_Open(Cancel As Integer)
       Me!foDetailsKursid.Form.filter = Me.filter
       Me!foDetailsKursid.Form.FilterOn = True
    End Sub


    Alledings wird der Filter im Unterformular "foDetailsKursid" nicht ausgelöst, es werden alle Datensätze dargestellt.


    Liebe Grüße, die Luzie!

    Sonntag, 11. Oktober 2015 08:15
  • Hallo Luzie!

    Alledings wird der Filter im Unterformular "foDetailsKursid" nicht ausgelöst, es werden alle Datensätze dargestellt.

    Was hältst Du davon, wenn Du eine kleine Beispieldatenbank bereitstellst. Dann brauchen wir nicht allgemein diskutieren sondern können Dein Problem konkret angehen.

    CU


    Thomas@Team-Moeller.de
    Blog: Blog.Team-Moeller.de
    Homepage: www.Team-Moeller.de


    Sonntag, 11. Oktober 2015 13:31
  • Hallo Thomas,

    http://1drv.ms/1N86HrI

    Hier habe ich die Beispieldatenbank hochgeladen.


    Liebe Grüße, die Luzie!



    • Bearbeitet Luzie Montag, 12. Oktober 2015 08:03
    Montag, 12. Oktober 2015 08:01
  • Hallo Luzie!

    Die Tatsache, dass Dein Detailformular an keine Datenquelle gebunden ist, führt dazu, dass die Filter-Eigenschaft nicht zur Verfügung steht.

    Ich habe den Code wie folgt umgestellt:

    Private Sub sfDetail_Click()
        Dim stDocName As String
        stDocName = "FoDetail"
        DoCmd.OpenForm stDocName, , , , , , Me.tfKursid
    End Sub


    Private Sub Form_Load()
        Me.tfoa = Me.OpenArgs
        Me.lbdetails.RowSource = "select nr, detail, did, kursid from qryDetailKursid where kursid=" & Me.OpenArgs & " order by detail"
        Me!foDetailsKursid.Form.filter = "kursid=" & Me.OpenArgs
        Me!foDetailsKursid.Form.FilterOn = True
    End Sub

    Auf das Sichern der OpenArgs im Steuerelement tfoa kannst Du auch verzichten - es sei denn, Du brauchst es später noch. Aber da stehen Dir die OpenArgs auch noch zur Verfügung.

    HTH


    Thomas@Team-Moeller.de
    Blog: Blog.Team-Moeller.de
    Homepage: www.Team-Moeller.de


    Montag, 12. Oktober 2015 18:01
  • Hallo Thomas,

    ok, das habe jetzt verstanden.

    Vielen Dank für Deine Hilfe.


    Liebe Grüße, die Luzie!

    Dienstag, 13. Oktober 2015 14:54