Sortieren von Datensätzen (FireDAC)
Nach oben zu Arbeiten mit Datenmengen (FireDAC)
Inhaltsverzeichnis
Allgemeine Informationen
Alle FireDAC-Datenmengen bieten Möglichkeiten zum lokalen Sortieren der Datensätze. Vor der Sortierung von Datensätzen ruft FireDAC alle Datensätze aus der Ergebnismenge ab. FireDAC erstellt und verwaltet intern eine Liste der sortierten Datensätze. Bei großen Datensatzmengen kann die Sortierung lange dauern, aber die folgende Navigation in den Datensätzen ist genauso schnell wie ohne Sortierung.
Standardsortierung
Zum Sortieren von Datensätzen nach Feldwerten verwendet die Anwendung die Eigenschaft IndexFieldNames. Die Eigenschaft unterstützt mehrere Felder, Groß-/Kleinschreibung und eine absteigende Sortierung. Außerdem können Sie mit FormatOptions.SortOptions die Eigenschaften der Sortierreihenfolge ändern. Zum Beispiel:
FDQuery1.IndexFieldNames := 'ORDERID';
oder
FDQuery1.IndexFieldNames := 'OrderDate:D;Price';
Wenn in einer Datenmenge Indizes in der Indexes-Sammlung definiert sind, können Sie alternativ einen der Indizes auswählen. Verwenden Sie dazu die Eigenschaft IndexName. Zum Beispiel:
with FDQuery1.Indexes.Add do begin
Name := 'By OrderDate';
Fields := 'OrderDate';
Active := True;
end;
FDQuery1.IndexName := 'By OrderDate';
Datenmengenansichten
In FireDAC können mithilfe der Indexes-Sammlung Ansichten für die Datensätze der Datenmenge definiert werden. Die folgenden TFDIndex-Eigenschaften steuern die Ansicht:
- Sortieren nach Feldern (Fields, CaseInsFields, DescFields, Options).
- Sortieren nach Ausdrücken (Expression, Options).
- Datensatzfilter (Filter, FilterOptions).
- Datensatzunterscheidungs-Flag (Distinct).
Die Eigenschaft Name enthält den Namen der Ansicht. Dieser Name muss in der Datenmenge eindeutig sein.
Die Ansicht stellt eine Liste mit Datensätzen dar, die von FireDAC beim Abrufen oder Bearbeiten von Datensätzen durch die Anwendung verwaltet wird. Die Ansicht wird beibehalten, wenn sowohl die Eigenschaft Active als auch die Eigenschaft IndexesActive der Datenmenge auf True gesetzt ist. Wenn in den Optionen für die Ansicht die Eigenschaften soUnique oder soPrimary gesetzt sind, aber für die Anwendung eindeutige Datensätze erforderlich sind, setzen Sie die Eigenschaft ConstraintsEnabled der Datenmenge auf True.
Wenn die Ansicht ausgewählt ist, stellt die Datenmenge die von dieser Ansicht verwaltete Datensatzliste dar. Setzen Sie zum Auswählen der Ansicht deren Eigenschaft Selected auf True, oder setzen Sie die Eigenschaft IndexName der Datenmenge auf den Namen der Ansicht. Zum Beispiel:
with FDQuery1.Indexes.Add do begin
Name := 'May sale dates';
Fields := 'OrderDate';
Filter := 'MONTH(OrderDate) = 5';
Distinct := True;
Active := True;
Selected := True;
end;
Weitere Optionen
Einige Navigationsmethoden, wie Locate/Lookup/SetRange, verwenden zur Optimierung ihrer Funktion die aktuelle Sortierreihenfolge. Die Eigenschaft Filter verwendet die Ansichten nicht zur Optimierung der Filterung.
Die Anwendung kann die Felder fkInternalCalc und fkAggregate bei der Sortierung verwenden. FireDAC unterstützt die Sortierung von Feldern mit den Typen fkCalculated und fkLookup nicht. Als Workaround kann die Anwendung das fkInternalCalc-Feld erstellen, in der Ereignisbehandlungsroutine OnCalcFields mit den fkCalculated- oder fkLookup-Feldwerten füllen und dann nach diesem fkInternalCalc-Feld sortieren.
Zum Sortieren von Datensätzen nach ursprünglichen Datensatzreihenfolgen (da die Datensätze abgerufen und /oder hinzugefügt wurden) verwenden Sie '#' als Wert für die Eigenschaften IndexFieldNames und Fields.
TFDTable und Sortierung
Die TFDTable-Sortierung wird serverseitig durchgeführt (ORDER BY). FireDAC fügt der Sortierreihenfolge automatisch und transparent Primärschlüsselfelder hinzu. Dies ist für eine ordnungsgemäße Live-Datenfensterfunktionalität erforderlich.
Siehe auch
- Erstellen von Ausdrücken
- Filtern von Datensätzen
- Suchen von Datensätzen
- Berechnete und summierte Felder
- Haupt/Detail-Beziehung
- Durchsuchen von Tabellen
Beispiele
- FireDAC TFDMemTable Main (Beispiel)
- FireDAC TFDQuery Indices (Beispiel)