Base - Ein Formular (aus einer Abfrage) mit mehreren Filterfeldern erstellen

HowTos, komplexe Anleitungen und nützliche Dokumente

Moderator: Moderatoren

Forumsregeln
Hier bitte komplexere Anleitungen allgemeinem Interesses posten, sowie wichtige Dokumente zum Download.
Bitte hier (möglichst) keine Diskussionen führen. Für Fragen und Hinweise ein neues Thema im entsprechenden Unterforum eröffnen.
Antworten
quotsi
******
Beiträge: 577
Registriert: Do, 14.11.2013 10:04

Base - Ein Formular (aus einer Abfrage) mit mehreren Filterfeldern erstellen

Beitrag von quotsi »

Text überarbeitet: 24.7.2022
----
Es sei eine base-Datei mit Tabelle(n) und funktionierenden Abfragen vorhanden (und die Begriffe Tabelle, Abfrage, Formular, Felder in base seien bekannt!).
Suchfelder sind Textfelder im Formular, in denen Worte oder Wortfragmente eingegeben werden können, nach denen in Suchzielfeldern gesucht wird.

1. Jetzt wird eine zusätzliche Tabelle namens „Filter“ erzeugt.
Diese besteht aus nur zwei oder mehreren Feldern (aber nur einem Datensatz !):
1. ID (Es ist zugleich das indizierte Feld, was man am Anker in der Spalte vor dem Feldnamen erkennt)
ID ist vom Feldtyp Ja/Nein [BOOLEAN], Länge 0, Standardwert nein.
2. Weitere Felder (soviele wie Suchfelder erstellt werden sollen), in diesem Demonstrationsbeispiel nur 2 namens „Suche1" und „Suche2".
Diesese Felder sind vom Feldtyp Text [VARCHAR] Eingabe=nein, Länge 50
In Feld ID trägt man in ersten & einzigen Datensatz Ja ein.

2. Nun wird eine Abfrage überarbeitet.
Im Folgenden sind:
AAA ist der Name der Tabelle , auf die sich die Abfrage bezieht,
BBB , CCC und DDD sind die Felder in denen nach Ähnlichkeiten gesucht werden soll (Suchzielfelder), um die Zahl der Datensätze einzugrenzen oder auf einen einzigen Datensatz zu reduzieren (Wirkung eines Filters)
EEE ist das Feld, nachdem die Abfrage sortiert wird.
Eine funktionierenden Abfragen wird kopiert und umbenannt wieder eingefügt,
z.B. „Abfrage - AAA mit Suche“. Diese wird mit SQL bearbeitet, z.B.

SELECT "AAA".*
FROM "AAA"
WHERE
( LOWER ( "BBB" ) LIKE '%' || COALESCE ( ( SELECT LOWER ( "Suche1" ) FROM "Filter" WHERE "ID" = TRUE ), '' ) || '%' )
OR
( LOWER ( "CCC" ) LIKE '%' || COALESCE ( ( SELECT LOWER ( "Suche1" ) FROM "Filter" WHERE "ID" = TRUE ), '' ) || '%' )
OR ("BBB" IS NULL AND "CCC" IS NULL)
AND
( LOWER ( "DDD" ) LIKE '%' || COALESCE ( ( SELECT LOWER ( "Suche2" ) FROM "Filter" WHERE "ID" = TRUE ), '' ) || '%' )
OR ("DDD" IS NULL)
ORDER BY ".EEE" ASC

3. Jetzt wird ein Formular mit Namen „Formular-Abfrage-AAA mit Suche“ erarbeitet, welches zunächst alle notwendigen Felder der genannten Abfrage enthält. Beim Bearbeiten des Formulars sind diese Felder einschließlich der Beschriftungsfelder im Formularnavigator unter MainForm (oder unter einem anderen Namen, wie man im Formularnavigator sehen kann) gelistet. Üblicherweise werden die Beschriftungsfelder als „lbl…“ und die Textfelder als „txt…“ benannt.
Dann wird im Formularnavigator ein weiteres Formular namens „Suche“ hinzugefügt.
Im Formular selbst werden noch weitere Felder hinzugefügt:
3.1. Für jedes Suchfeld ein Textfeld , z.B. „Suche1“ bzw. „Suche2“ , mit Höhen-Maßen wie die anderen Textfelder.
In den Formulareigenschaften unter Daten greifen diese Felder auf Art des InhaltsTabelleInhalt
Filter“ zu. Ferner wird eingetragen:
SQL → ja
Filter → ("Filter"."ID" = TRUE )
Daten hinzu -> nein
Daten ändern -> ja
Daten löschen -> nein
Nur Daten hinzufügen -> nein
Symbolleiste Navigation -> nein
Zyklus -> Aktueller Datensatz
Der Eintrag im Suchfeld Suche1“ sucht nach irgendwelcher Übereinstimmung in den Suchzielfeldern sowohl in BBB als auch in CCC, der Eintrag im Suchfeld Suche2“ hingegen nur in DDD. Zweckmäßigerweise gibt man in den Beschriftungsfeldern für Suche1 und Suche2 an, in welchen Feldern die eingegebenen Begriffe gesucht werden (vergleiche Abfrage).
3.2. Ein weiteres notwendiges Feld ist die Schaltfläche Finden“ , die ich bisher in ähnlicher Höhe wie die Textfelder gestaltete (aber das ist Geschmacksfrage). Diese Schaltfläche ist im Formularnavigator am MainForm (dem Hauptformular, in dem alle außer den Suchfeldern verankert sind) angebunden. Für dieses Schaltfläche wird unter Steuerelement-Eigenschaften ziemlich unten unter AktionFormular aktualisieren“ ausgewählt.

4. Nach Sicherung des Formulars und der Datei kann das Formular aufgerufen werden. Man muß beim ersten Versuch mit leeren Feldern „Suche1“ und "Suche2" nach Klick auf den Schaltknopf „Finden“ alle Datensätze durchschalten können.
Alle anderen Eingaben unter „Suche1“ oder „Suche2“ bewirken nach Klick auf „Finden“ die Eingrenzung der Datensätze auf Übereinstimmungen (eine Filter- bzw. Einzelselektion) (bzw. auf Datensätze mit paarig leeren Suchzielfeldern nur bei Suche1, nicht im Feld Suche2).

Fußnote:
a) Dieser Text entstand durch fachliche Unterstützung von RobertG vom Libre-Office-Forum, dem Verfasser des Base-Handbuchs.
b) Für das Einfügen von verlinkten Bildern über das Formular, bevor man etwas in die Suchzielfelder BBB , CCC oder DDD eingetragen hat, diese drei also noch leer sind, sind die Zeile im QSL-Code [ OR ("BBB" IS NULL AND "CCC" IS NULL) ] und [ OR ("DDD" IS NULL) ] wichtig! Sonst kann man diese speziellen Datensätze zur Bearbeitung über das Formular nicht mehr aufrufen und müßte die leeren Felder BBB oder CCC oder DDD über die Tabelle auffüllen.
win7prof - Avira - LO 7.0.6.2 (x64) - AOO 4.1.10
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Antworten