Seite 1 von 1
Filter von Daten verschiedener Tabellen
Verfasst: Mo, 30.12.2013 12:21
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
Re: Filter von Daten verschiedener Tabellen
Verfasst: Mo, 30.12.2013 13:09
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
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
Re: Filter von Daten verschiedener Tabellen
Verfasst: Mo, 30.12.2013 14:23
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?
Re: Filter von Daten verschiedener Tabellen
Verfasst: Mo, 30.12.2013 14:31
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?
Re: Filter von Daten verschiedener Tabellen
Verfasst: Mo, 30.12.2013 15:30
von F3K Total
Klar,
gehe in die Farbfilter-Listbox und selektiere den obersten, leeren Eintrag.
Gruß R
Re: Filter von Daten verschiedener Tabellen
Verfasst: Do, 02.01.2014 12:44
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
Re: Filter von Daten verschiedener Tabellen
Verfasst: Do, 02.01.2014 13:33
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
Re: Filter von Daten verschiedener Tabellen
Verfasst: Do, 02.01.2014 15:47
von S_teffi
Super, vielen lieben Dank!! (: