none
Hauptformular filtern nach Kriterien im UFO

    Frage

  • Hallo,

    ich habe ein Hauptformular mit den Stammdaten des Personals (ca. 1500 Mitarbeiter) die von der Tabelle Stammdaten ausgelesen werden. Im UFO habe ich die jeweiligen Ausbildungen zu jedem einzelnen, ausgelesen aus der Tabelle 'Ausbildung' und verbunden mit dem Hauptformular über 'IDPerson'.

    Nun möchte ich alle Mitarbeiter filtern, die z. B. eine erste Hilfe Ausbildung haben. Das heißt, ich möchte nur die Datensätze angezeigt bekommen, bei den im Unterformular 'Erste Hilfe' in einer Tabellenzeile auftaucht.

    Idealerweise möchte ich im Hauptformular in ein Textfeld den Suchbegriff (oder in 4 Textfelder 4 Suchbegriffe) eingeben und über einen Button die Filterung starten.

    Im Moment habe ich gar keinen Plan, wie ich die Aufgabe angehen könnte. Hat jemand eine Idee?

    Danke

    Klaus

    Mittwoch, 23. November 2011 09:12

Antworten

  • Hallo,

    ich habe dazu eine Lösung gefunden. Ich schreib sie hier mal auf, vielleicht kann irgendwer das mal brauchen.

    Ich habe die Abfrage "personal" auf die das Formular zugreift kopiert, wieder eingefügt und "personal1" genannt.

    In der Abfrage "personal1" habe ich dann im Feld "Ausbildung" als Kriterium: "Wie "*" & [Welche Ausbildung? ] & "*"" eingefügt.

    (Der Text in der eckigen Klammer erscheint als Text in der insertbox. Einfügen von * sorgt dafür, dass in den Feldern der Suchbegriff als "Teil des Feldes" gesucht wird. Beim Öffnen dieser Abfrage "Personal1" (und später auch im Formular) erscheint jetzt erst eine insertbox in die ich den gesuchten Begriff reinschreibe. Nach "OK" werden jetzt in der sich öffnenden Abfrage nur die Datensätze angezeigt, die das Suchkriterium beinhalten.)

    In meinem Formular brauche ich jetzt nur noch einen Button, mit dem ich die Datenherkunft von der Abfrage "personal" auf die Abfrage "personal1" ändere. (Me.RecordSource = "personal1").Beim zweiten mal Drücken geht es wieder zurück zur Abfrage "personal". Für die leichtere Bedienbarkeit wechsle ich auch die Beschriftung vom Button von : "Suchen in Ausbildung" in "Filter schließen" und beim zweiten Drücken zurück.

    Gruß Klaus

     

    Mittwoch, 30. November 2011 14:49

Alle Antworten

  • Hallo,

    ich habe das mal so gelöst, dass ich die Datenquelle des Hauptformulars auf eine Abfrage umgestellt habe, die neben allen Feldern der Haupttabelle auch eine Spalte mit der Anzahl der Datensätze aus der abhängigen Tabelle liefert. Dazu habe ich die Untertabelle mit einem LEFT JOIN eingebunden und über alle Felder der Haupttabelle gruppiert. Die Anzahl der Sätze in der Untertabelle liefert dann ein COUNT(<untertabelle>.id).

    SELECT main.A, main.B, main.C, Count(sub.ID) as ANZAHL_SÄTZE_UNTERTABELLE
    FROM main LEFT JOIN sub ON main.ID = sub.ID_MAIN
    GROUP BY main.A, main.B, main.C;

    Will ich, dass im Hauptformular nur Sätze angezeigt werden, für die ein Datensatz in der Untertabelle existiert kann ich den Filter auf "ANZAHL_SÄTZE_UNTERTABELLE > 0" setzten.

    Gruß
    Dirk

    Mittwoch, 23. November 2011 13:37
  • Hallo Dirk,

    danke für den Weg.

    Bei der Umsetzung ist mein erstes Problem: "Zu viele Ausdrücke in Group By-Klausel". Ich hab mal gezählt und es sind 151 Ausdrücke. Was ist denn die zulässige Anzahl?

    Nach dem Vorschlag werden dann nur Datensätze (Mitarbeiter) des Hauptformulars  angezeigt, bei denen Datensätze (Ausbildungen) aus der Tabelle 'Ausbildung' vorhanden sind.

    Mein Ziel ist, alle Mitarbeiter anzuzeigen, die als Ausbildung z. B. eine Ausbildung XXX haben.

    So eine Aufgabe sollte doch schon mal gelöst worden sein, oder?

    Gruß

    Klaus

    Donnerstag, 24. November 2011 09:57
  • Hallo,
    Bei der Umsetzung ist mein erstes Problem: "Zu viele Ausdrücke in Group By-Klausel". Ich hab mal gezählt und es sind 151 Ausdrücke. Was ist denn die zulässige Anzahl?
    128, aber die Frage ist, ob du ueberhaupt gruppieren musst oder DISTINCT nicht ausreicht, also SELECT DISTINCT Feld1, Feld2, ...
    Nach dem Vorschlag werden dann nur Datensätze (Mitarbeiter) des Hauptformulars  angezeigt, bei denen Datensätze (Ausbildungen) aus der Tabelle 'Ausbildung' vorhanden sind.

    Mein Ziel ist, alle Mitarbeiter anzuzeigen, die als Ausbildung z. B. eine Ausbildung XXX haben.


    Dazu musst du in der WHERE-Bedingung XXX angeben, z.B. WHERE Ausbildung In ('XXX', 'YYY', 'ZZZ').

    Gruss - Peter

    Sonntag, 27. November 2011 18:47
    Moderator
  • Hallo,

    ich habe dazu eine Lösung gefunden. Ich schreib sie hier mal auf, vielleicht kann irgendwer das mal brauchen.

    Ich habe die Abfrage "personal" auf die das Formular zugreift kopiert, wieder eingefügt und "personal1" genannt.

    In der Abfrage "personal1" habe ich dann im Feld "Ausbildung" als Kriterium: "Wie "*" & [Welche Ausbildung? ] & "*"" eingefügt.

    (Der Text in der eckigen Klammer erscheint als Text in der insertbox. Einfügen von * sorgt dafür, dass in den Feldern der Suchbegriff als "Teil des Feldes" gesucht wird. Beim Öffnen dieser Abfrage "Personal1" (und später auch im Formular) erscheint jetzt erst eine insertbox in die ich den gesuchten Begriff reinschreibe. Nach "OK" werden jetzt in der sich öffnenden Abfrage nur die Datensätze angezeigt, die das Suchkriterium beinhalten.)

    In meinem Formular brauche ich jetzt nur noch einen Button, mit dem ich die Datenherkunft von der Abfrage "personal" auf die Abfrage "personal1" ändere. (Me.RecordSource = "personal1").Beim zweiten mal Drücken geht es wieder zurück zur Abfrage "personal". Für die leichtere Bedienbarkeit wechsle ich auch die Beschriftung vom Button von : "Suchen in Ausbildung" in "Filter schließen" und beim zweiten Drücken zurück.

    Gruß Klaus

     

    Mittwoch, 30. November 2011 14:49