Filter von Daten verschiedener Tabellen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

S_teffi
**
Beiträge: 26
Registriert: Do, 12.12.2013 15:31

Filter von Daten verschiedener Tabellen

Beitrag von S_teffi »

Hallo liebes Forum,

habe mir die Tutorials (viewtopic.php?f=27&t=54234#p237478) angesehen und ausprobiert. Finds super, dass der Filter ohne Makros funktioniert. Hab den Filter für mein Beispiel auch hinbekommen, allerdings nur für Daten, die direkt in der Haupttabelle gespeichert werden. Bei Daten, die in anderen Tabellen liegen und über IDs verknüpft sind, greift der Filter irgendwie nicht :( Ich lade mal ein Beispiel hoch. Im Formular „Alle Daten Filter qAuftrag qFarbe“ ist zu sehen, dass die Filterabfrage für „Auftrag“ klappt, aber für „Farbe“ leider nicht..

Ich hoffe Ihr könnt mir helfen.

Liebe Grüße, Steffi
Dateianhänge
BeispielDB_Suche.odb
(48.05 KiB) 88-mal heruntergeladen
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Filter von Daten verschiedener Tabellen

Beitrag von F3K Total »

Hi Steffi,
das sieht schon richtig gut aus, ganz großes Kino, auch das Listenfeld für die Farbwahl, Klasse.
Zwei kleine Flüchtigkeitsfehler habe ich gefunden:
Damit das Formular Alle Daten Filter qAuftrag qFarbe funktioniert,
  • nimm die Abfrage, die du dafür gemacht hast, qFilter_qAuftrag_qFarbe als Datengrunglage für das Formular, momentan war qFilter_qAuftrag eingstellt.
  • In der Abfrage qFilter_qAuftrag_qFarbe fehlt eine Umklammerung(rot):
    WHERE
    ( LOWER ( "Auftragsnummer" ) LIKE LOWER ( '%' || :qAuftragsnummer || '%' ) OR :qAuftragsnummer IS NULL )
    AND
    ( "Farbe_ID" = :qFarbe_ID OR :qFarbe_ID IS NULL )
Wie du hier siehst, habe ich noch '%' || vor :qAuftragsnummer eingetragen, so kannst Du z.B. auch nur eine Zahl eingeben um nach der Auftragsnummer zu suchen.
Um weitere Filterfelder zuzufügen, brauchst du nur der Filtertabelle jeweils eine Spalte zufügen, die Abfrage dazu passend um

Code: Alles auswählen

AND 
    ( "Spalte" = :qSpalte OR :qSpalte IS NULL )
erweitern, für Textspalten ggf. mit dem bekannten LOWER und '%' davor und/oder dahinter und die Verknüpfung zum Filterformular ebenfalls um die neue Spalte erweitern.

Viel Erfolg
Gruß R
S_teffi
**
Beiträge: 26
Registriert: Do, 12.12.2013 15:31

Re: Filter von Daten verschiedener Tabellen

Beitrag von S_teffi »

Vielen Dank für die schnelle Antwort! Also irgendwas stimmt bei der Abfrage nicht, hab deine Klammern und das '%' || ergänzt und die Abfrage sieht vollständig so aus:

Code: Alles auswählen

SELECT "a"."*", 

( SELECT IFNULL( "TA_Farbe"."Farbe_Kosten", 0 ) + IFNULL( "TA_Form"."Form_Kosten", 0 )  FROM "TA_Farbe", "TA_Form" WHERE "TA_Farbe"."Farbe_ID" = "a"."Farbe_ID" AND "TA_Form"."Form_ID" = "a"."Form_ID" ) AS "Kosten" 

FROM "TA_Main" AS "a" 

WHERE ( LOWER ( "Auftragsnummer" ) LIKE LOWER ( '%' || :qAuftragsnummer || '%' ) OR :qAuftragsnummer IS NULL ) AND  ( "Farbe_ID" = :qFarbe_ID OR :qFarbe_ID IS NULL )
Wenn ich bei den Parametern nichts eingebe, müssten ja alle Aufträge angezeigt werden - aber es kommt kurioser Weise nur Auftrag A004 raus.

Für die Auftragsnummer ohne AND ( "Farbe_ID" = :qFarbe_ID OR :qFarbe_ID IS NULL ) funktioniert es, aber mit der Farbe_ID nicht.. und die Filtertabelle hatte ich ja bereits um das Integer-Feld "Farbe_ID" erweitert. Siehst du vllt noch einen Fehler?
S_teffi
**
Beiträge: 26
Registriert: Do, 12.12.2013 15:31

Re: Filter von Daten verschiedener Tabellen

Beitrag von S_teffi »

ach.. da kommt immer A004 raus, weil zuletzt gelb gewählt wurde und das noch in der Filter-Tabelle gespeichert ist. oooohjeee. Brett vorm Kopf, sorry ^^

Gibts eine Möglichkeit die letzte Filterung immer zu löschen?
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Filter von Daten verschiedener Tabellen

Beitrag von F3K Total »

Klar,
gehe in die Farbfilter-Listbox und selektiere den obersten, leeren Eintrag.
Gruß R
S_teffi
**
Beiträge: 26
Registriert: Do, 12.12.2013 15:31

Re: Filter von Daten verschiedener Tabellen

Beitrag von S_teffi »

Hallo & frohes neues Jahr erst mal (:

Ja, ich dachte nur an die Möglichkeit, dass sobald man das Formular erneut öffnet, die Filtertabelle geleert ist, sodass in den Suchfeldern zur Eingabe nichts drin steht. Aber das geht sicher irgendwie über ein Makro, da probiere ich mal rum.

Ich habe das Formualr ja jetzt so gestaltet, dass die Einträge im Tabellenblatt editierbar bleiben - entweder als Textfeld oder Listenfeld. Änderungen werden allerdings sofort übernommen, ohne dass gefragt wird, ob man den Datensatz überhaupt ändern möchte - d.h. wenn man ausversehen irgendeine Zelle ändert, würde man das gar nicht mitbekommen. Gibt es hier nicht auch die Möglichkeit, dass eine Meldung wie z.B. "Der Inhalt des aktuellen Formulars wurde geändert. Sollen die Änderungen gespeichert werden?" kommt?

Liebe Grüße, Steffi
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Filter von Daten verschiedener Tabellen

Beitrag von F3K Total »

Hi, hier zwei kleine Makros dafür:
  • Filter leeren, an das Ereignis Beim Laden des Filterformulares gebunden:

    Code: Alles auswählen

    Sub S_Reset_Filter(event)
         if event.source.supportsservice("com.sun.star.sdbcx.ResultSet") then
             oform = event.source
             for i = 1 to oForm.columns.count
                 oform.updatenull(i)
             next i
         endif
         oform.updaterow
         oform.reload
    end sub
  • Schreibwarnung, an das Ereignis vor der Datensatzaktion des Unterformulares gebunden

    Code: Alles auswählen

    Sub S_Check_modify_accepted(event)
         if event.source.supportsservice("com.sun.star.sdbcx.ResultSet") then
             oform = event.source
             if msgbox ("Die aktuelle Zeile wurde geändert, sollen die Änderungen übernommen werden?",36,"Datensatzaktion") = 7 then
                oForm.refreshrow
             endif
         endif
    End Sub
Viel Erfolg
Gruß R
S_teffi
**
Beiträge: 26
Registriert: Do, 12.12.2013 15:31

Re: Filter von Daten verschiedener Tabellen

Beitrag von S_teffi »

Super, vielen lieben Dank!! (:
Antworten