Formular: Teile eines Namens suchen - FAQ-Base

From The Document Foundation Wiki
< Faq‎ | Base‎ | 130
Jump to: navigation, search

Wie kann ich in einem Formular nach Teilen eines Namens suchen?

Die Such- und Filterfunktionen in Formularen sind im Base-Handbuch ausführlich beschrieben. Prinzipiell bietet die Datensatzsuche, die mit einem Vergrößerungsglas-Button gestartet werden kann, die Möglichkeit, einzelne Felder einer Tabelle nach Teilen eines Textes zu durchsuchen. Für den Anfang sind sicher alle Such- und Filtermodule des Formulars recht brauchbar. Im täglichen praktischen Gebrauch weisen sie aber leider einige Nachteile auf:

  • Die Suche nach Parametern ist recht langsam, da sie nicht mit SQL-Befehlen arbeitet, sondern die Felder einzeln auf die enthaltenen Elemente untersucht. Sie grenzt die Anzahl der zu duchsuchenden Datensätze nicht ein.
  • Die Suche nach Parametern funktioniert nicht mit den in Listenfeldern angezeigten Inhalten. Sie sucht nach den dem Listnfeld zugrundeliegenden Fremdschlüssel.
  • Sämtliche Such- und Filtermodule funktionieren nur im Hauptformular oder im Unterformular, nicht aber in beiden gleichzeitig. Bei Unterformularen wird nur das Unterformular durchsucht, das zum aktuellen Datensatz des Hauptformulars passt.

Aus den genannten Gründen werden im Handbuch andere Wege einfachen Suche verfolgt.

Zuerst wird eine Tabelle "Filter" erstellt:

ID Text
TRUE Suchtext

Primärschlüssel ist für die Filter-Tabelle ein Ja/Nein-Feld. Der erste Datensatz wird vorgegeben, indem einfach TRUE (Markierfeld gedrückt) gewählt wird. Ein Suchtext fehlt noch. Die folgende Abfrage bezieht sich jetzt auf die Tabelle "Filter":

SELECT * FROM "Tabelle" WHERE LOWER("Name") LIKE '%'||COALESCE((SELECT LOWER("Text") FROM "Filter" WHERE "ID" = TRUE),LOWER("Name"))||'%'

Diese Abfrage zeigt alle Felder aus der Tabelle an. Sie ist editierbar, da der Primärschlüssel enthalten ist. Sie zeigt alle Datensätze an, wenn kein Suchtext in der Tabelle "Filter" enthalten ist. Während das bisherige Hauptformular mit der Tabelle "Tabelle" verbunden ist, wird jetzt stattdessen die obige Abfrage genommen.

Neben dem Hauptformular wird jetzt ein weiteres Formular "Filter" erstellt: Formularnavigator > Formulare > Neu > Formular. Dieses Nebenformular hat als Datenquelle die Tabelle "Filter". In den Formulareigenschaften werden außerdem folgende Einträge vorgenommen: Filter > ("ID" = TRUE), Daten hinzufügen > Nein, Daten löschen > Nein, Navigationsleiste > Nein, Zyklus > aktueller Datensatz. Diesem Formular wird nur ein Textfeld für das Feld "Text" zugeordnet, in das der Suchtext eingetragen wird.

Dem Hauptformular, das sich jetzt auf die vorher erstellte Abfrage bezieht, wird noch ein Button hinzugefügt, der aber direkt neben dem Textfeld des Formulars "Filter" positioniert wird. Der Schaltfläche wird die Aktion > Formular aktualisieren zugeordnet.

Das Formular wird gespeichert. Wird jetzt das Formular zur Eingabe von Daten genutzt, so kann über die Eingabe des Suchtextes nach Teilen des Feldes "Name" gefiltert werden. Der Button dient dabei gleichzeitig dem Abspeichern des Suchtextes (durch das Verlassen des Nebenformulares) als auch der Aktualisierung des Hauptformulars.

Neben dieser Möglichkeit gibt es noch viele andere Filtermöglichkeiten, die im Base-Handbuch beschrieben sind.