Tri des enregistrements (FireDAC)
Remonter à Utilisation des ensembles de données (FireDAC)
Sommaire
Informations générales
Tous les ensembles de données FireDAC offrent des possibilités de tri des enregistrements en local. Avant de trier les enregistrements, FireDAC extrait tous les enregistrements de l'ensemble de résultats. FireDAC construit et gère en interne une liste d'enregistrements triés. Ainsi, lorsque le tri s'applique à de gros volumes d'enregistrements, l'opération peut prendre du temps, mais la navigation au sein des enregistrements est ensuite aussi rapide que s'il n'y avait pas de tri.
Tri standard
Pour que le tri de l'ensemble de données s'effectue selon les valeurs des champs, l'application utilise la propriété IndexFieldNames. Elle prend en charge les modes champs multiples, distinction majuscules/minuscules et l'ordre décroissant. Vous pouvez aussi utiliser FormatOptions.SortOptions pour modifier les propriétés relatives à l'ordre de tri. Par exemple :
FDQuery1.IndexFieldNames := 'ORDERID';
ou
FDQuery1.IndexFieldNames := 'OrderDate:D;Price';
Par ailleurs, lorsqu'un ensemble de données comporte des index définis sur la collection Indexes, l'un des index peut être sélectionné. Pour ce faire, utilisez la propriété IndexName. Par exemple :
with FDQuery1.Indexes.Add do begin
Name := 'By OrderDate';
Fields := 'OrderDate';
Active := True;
end;
FDQuery1.IndexName := 'By OrderDate';
Vues relatives aux ensembles de données
FireDAC permet de définir des vues relatives aux enregistrements de l'ensemble de données en utilisant la collection Indexes. Les propriétés TFDIndex contrôlent la vue :
- Tri par champ (Fields, CaseInsFields, DescFields, Options).
- Tri par expression (Expression, Options).
- Filtre d'enregistrements (Filter, FilterOptions).
- Indicateur de distinction des enregistrements (Distinct).
La vue est identifiée par la propriété Name. Elle doit être unique pour la totalité de l'ensemble de données.
La vue est une liste des enregistrements maintenus par FireDAC lorsque l'application extrait ou modifie des enregistrements. La vue est maintenue lorsque les propriétés Active et IndexesActive de l'ensemble de données sont toutes deux définies sur True. Lorsque la vue a la propriété soUnique ou soPrimary dans Options et que l'application doit imposer l'unicité des enregistrements, définissez la propriété ConstraintsEnabled de l'ensemble de données sur True.
Lorsque la vue est sélectionnée, l'ensemble de données représente la liste d'enregistrements maintenue par cette vue. Pour sélectionner la vue, définissez sa propriété Selected sur True ou définissez la propriété IndexName de l'ensemble de données sur le nom de la vue. Par exemple :
with FDQuery1.Indexes.Add do begin
Name := 'May sale dates';
Fields := 'OrderDate';
Filter := 'MONTH(OrderDate) = 5';
Distinct := True;
Active := True;
Selected := True;
end;
Autres options
Certaines méthodes de navigation, comme Locate / Lookup / SetRange, utilisent l'ordre de tri en cours pour optimiser leurs opérations. Notez que la propriété Filter n'utilise pas de vues pour optimiser le filtrage.
L'application peut utiliser les champs fkInternalCalc et fkAggregate dans les opérations de tri. FireDAC ne supporte pas le tri sur les champs de type fkCalculated et fkLookup. Pour remédier au problème, l'application peut créer le champ fkInternalCalc, le remplir dans le gestionnaire d'événement OnCalcFields avec la valeur du champ fkCalculated ou fkLookup, puis effectuer un tri sur ce champ fkInternalCalc.
Pour trier l'ensemble de données dans l'ordre des enregistrements originaux (au fur et à mesure que les enregistrements sont extraits et/ou ajoutés), utilisez une valeur '#' pour les propriétés IndexFieldNames et Fields.
TFDTable et tri
Le tri TFDTable est réalisé côté serveur (par ORDER BY). Notez que FireDAC ajoute automatiquement et de façon transparente les champs de clé primaire à l'ordre de tri. Cela est nécessaire pour que la fonctionnalité Fenêtre Données dynamiques fonctionne correctement.
Voir aussi
- Ecriture d'expressions
- Filtrage des enregistrements
- Recherche d'un enregistrement
- Champs calculés et champs d'agrégation
- Relation maître-détail
- Navigation dans la table
Exemples
- Exemple FireDAC TFDMemTable Main
- Exemple FireDAC TFDQuery Indices