Daten im Code sortieren und filtern

Abgeschlossen

Die vorherigen Beispiele haben gezeigt, wie Datensätze aus der Datenbank abgerufen werden können. Diese Daten werden standardmäßig nach dem Primärschlüssel sortiert.

Sie können angeben, wie Sie Ihre Daten sortieren möchten, bevor eine Find‑ oder FindSet-Anweisung ausführen. Das Ergebnis kann unterschiedlich sein, insbesondere bei einer FindFirst-Anwendung.

SetCurrentKey-Funktion

Verwenden Sie zum Sortieren von Datensätzen die Funktion SetCurrentKey, in der Sie das Feld (oder die Felder) angeben können, nach denen Sie sortieren möchten.

var
    customer: Record Customer;
begin
    customer.SetCurrentKey(City);

    customer.FindFirst();
    Message('%1', customer);

SetRange‑ und SetFilter-Funktionen

Neben der Sortierung können Sie auch Ihre Ergebnisse filtern. Mit dieser Methode müssen Sie nicht alle Daten aus der Datenbank abrufen, was für die Leistung besser ist.

Es gibt zwei Möglichkeiten, den Datensatz zu filtern SetRange und SetFilter.

Mit der Funktion SetRange können Sie einen Start‑ und Endwert für ein bestimmtes Feld angeben. Sie können die Funktion SetRange jedoch nicht für die Suche nach Datensätzen verwenden, bei denen der Feldwert größer oder kleiner als ein bestimmter Wert ist.

SetRange(Field, [FromValue], [ToValue])

Das folgende Beispiel zeigt, wie die SetRange-Funktion verwendet wird.

customer.SetRange("No.", '10000', '40000');
customer.FindSet();
repeat
    Message('%1', customer);
until customer.Next() = 0;

Das Weglassen der ToValue-Funktion bedeutet, dass Sie nach allen Datensätzen suchen müssen, in denen Field FromValue entspricht.

Wenn Sie außerdem FromValue weglassen, setzen Sie den Filter zurück und entfernen den Filter im angegebenen Feld.

customer.SetRange("No."); // Removing filter on "No." field
customer.FindSet();
repeat
    Message('%1', customer);
until customer.Next() = 0;

Sie haben bereits gelernt, dass Sie die Funktion SetRange nicht für die Suche nach Werten verwenden können, die größer oder kleiner als ein bestimmter Wert sind. Sie können jedoch die Funktion SetFilter für diesen Zweck verwenden.

Die Funktion SetFilter akzeptiert einen Zeichenfolgewert, in dem Sie Ihre Filterbedingungen angeben können, z. B.:

  • >
  • <
  • < >
  • <=
  • >=
  • '*'
  • .. (Bereich)
  • & (und)
  • | (oder) und mehr in diesem Filterzustand
SetFilter(Field, String, [Value1], [Value2], …)

Im folgenden Beispiel ruft der Filter alle Debitoren ab, bei denen das Feld Nr. größer als 10.000 ist und sich von 20.000 unterscheidet.

customer.SetFilter("No.", '> 10000 & <> 20000');

Alternativ können Sie Platzhalter verwenden.

value1 := '10000';
value2 := '20000';
customer.SetFilter("No.", '>%1&<>%2', value1, value2);

Geben Sie mehrere SetRange und/oder SetFilter-Anweisungen an, um mehrere Felder zu suchen und zu filtern.

Im folgenden Beispiel werden alle Debitoren mit einer Nr. zwischen 10.000 und 90.000 abgerufen, wo die Felder City mit einem Buchstaben B (Das @-Zeichen gibt an, dass die Groß- und Kleinschreibung nicht berücksichtigt wird, andernfalls wird immer zwischen Groß- und Kleinschreibung unterschieden) beginnen, und der Country/Region Code beginnt mit einem Großbuchstaben B.

customer.SetRange("No.", '10000', '90000');
customer.SetFilter(City, '@B*');
customer.SetFilter("Country/Region Code", 'B*');
customer.FindSet();
repeat
    Message('%1', customer);
until customer.Next() = 0;

Das folgende Beispiel zeigt die Verwendung eines „oder“ (|)-Filters.

customer.SetFilter("No.", '10000|20000|30000');

Sie können die Filteranweisungen mit der IsEmpty-Anweisung verwenden, um zu überprüfen, ob Datensätze mit Ihren Filtern übereinstimmen.

DocumentNo := '10000';

SalesLine.SetRange("Document No.", DocumentNo);
if (SalesLine.IsEmpty()) then
    Message('No sales line records found for document %1', DocumentNo);