Programmieren mit dBASE PLUS: filter

Aus Wikibooks


Ein SQL-Ausdruck, mit dem diejenigen Datensätze ausgefiltert werden, die bestimmten Kriterien nicht entsprechen.

Eigenschaft von[Bearbeiten]

Rowset

Beschreibung[Bearbeiten]

Mit Hilfe eines Filters lassen sich Zeilen zeitweise ausblenden (oder ausfiltern), die bestimmte Kriterien nicht erfüllen. Nur die übereinstimmenden Zeilen werden angezeigt. Die Kriterien werden in Form einer Zeichenfolge formuliert, die einen SQL-Ausdruck enthält. Dieser entspricht dem Ausdruck der Klausel WHERE einer SQL-Anweisung des Typs SELECT.

Beispiel:

"firstname = ’Waldo’"

In diesem Fall würden nur die Zeilen des aktuellen Datensatzbereichs angezeigt, deren Vorname-Feld "Waldo" enthält. Sie können den Filtermodus des Datensatzbereichs verwenden, indem Sie die Methode beginFilter( ) aufrufen. Damit können Sie den Ausdruck automatisch erzeugen und zusammen mit der Methode applyFilter( ) anwenden. Alternativ dazu kann die Zeichenfolge der Eigenschaft filter auch direkt zugeordnet werden.

Wenn der Filterausdruck einen in Anführungszeichen gesetzten String, der einen Apostroph enthält, beinhaltet, müssen Sie vor den Apostroph einen Backslash setzen. Beachten Sie, daß das in SQL-Ausdrücken für Strings verwendete einfache Anführungszeichen und der Apostroph dasselbe Zeichen auf der Tastatur darstellen. Wenn this beispielsweise das Rowset-Objekt ist, und Sie Zeilen, die den Nachnamen “O’Dell” enthalten, anzeigen wollen, verwenden Sie folgenden Ausdruck:

this.filter := "Nachname = 'O\'Dell'"

Durch das Setzen der Eigenschaft filter wird der Datensatzcursor zur ersten übereinstimmenden Zeile verschoben. Stimmt keine Zeile mit dem Filterausdruck überein, wird der Datensatzcursor an das Bereichsende verschoben. Die Eigenschaft endOfSet erhält den Wert True.

Bei einem aktiven Filter befindet sich der Datensatzcursor immer in einer übereinstimmenden Zeile oder am Bereichsende. Wenn Sie den Cursor verschieben wollen, wird geprüft, ob die Zeile die Filterbedingung erfüllt. Ist dies der Fall, kann der Datensatzcursor selbst in diese Zeile gesetzt und die Zeile angezeigt werden. Andernfalls wird der Datensatzcursor weiter in dieselbe Richtung verschoben, bis die nächste übereinstimmende Zeile gefunden oder das Bereichsende erreicht wird.

Beispiel:

Angenommen, this ist der Datensatzbereich, und die nachstehende Anweisung wird zum Programm hinzugefügt. Wenn kein Filter aktiv ist, wird der Cursor um vier Zeilen nach unten, zur letzten Zeile, verschoben:

this.next( 4 )

Ist dagegen ein Filter aktiv, wird der Cursor nach unten verschoben, bis vier Zeilen ermittelt wurden, die die Filterbedingung erfüllen. In der vierten wird angehalten. Dies können die nächsten vier Zeilen, falls diese alle übereinstimmen, oder die nächsten fünf oder die nächsten 400 Zeilen sein. Falls nach der aktuellen Zeile nicht vier übereinstimmende Zeilen vorhanden sind, wird die Suche nicht angehalten. In diesem Fall befindet sich der Datensatzcursor am Bereichsende.

Mit anderen Worten: Ist kein Filter aktiv, wird jede Zeile als übereinstimmend betrachtet. Durch Einstellen eines Filters können Sie alle Zeilen ausfiltern, die bestimmte Kriterien nicht erfüllen.

Um einen Filter zu deaktivieren, können Sie der Eigenschaft filter eine leere Zeichenfolge zuweisen oder die Methode clearFilter( ) aufrufen.

Mit dem Event canGetRow können Sie Zeilen mit einem komplexeren Code ausfiltern als mit einem SQL-Ausdruck.