Recherche d'un enregistrement (FireDAC)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation des ensembles de données (FireDAC)


FireDAC fournit des méthodes pour rechercher un enregistrement spécifique dans l'ensemble de données.

Informations générales

Tous les ensembles de données FireDAC fournissent des possibilités pour trouver un enregistrement dans le cache d'enregistrements d'un ensemble de données local. La recherche de l'enregistrement peut être optimisée selon le tri en cours.

Recherche standard

Les ensembles de données de FireDAC fournissent des options pour localiser un enregistrement ou rechercher une valeur selon une clé spécifiée. Ces méthodes utilisent l'index de l'ensemble de données en cours, s'il est approprié pour l'appel à la méthode.

  • La méthode Locate vous permet de trouver un enregistrement avec les valeurs de clé spécifiées :
 FDQuery1.IndexFieldNames := 'ORDERID';
 if FDQuery1.Locate('ORDERID', 10150, []) then
   ShowMessage('Order is found')
 else
   ShowMessage('Order is not found');
  • La méthode Lookup vous permet de rechercher une valeur selon les valeurs de clé spécifiées.

Recherche étendue

Les ensembles de données FireDAC fournissent des méthodes étendues pour rechercher un enregistrement. Ces méthodes utilisent l'index de l'ensemble de données en cours, s'il est approprié pour l'appel à la méthode.

  • La méthode LocateEx est similaire à la méthode Locate, mais elle dispose de davantage d'options, comme la recherche en avant ou en arrière, la recherche depuis le début ou depuis l'enregistrement en cours, ou la recherche basée sur un prédicat textuel (une expression). Par exemple :
 if FDQuery1.LocateEx('Price >= 1000 and Price <= 2000', []) then
   ShowMessage('Order is found')
 else
   ShowMessage('Order is not found');
  • La méthode LookupEx est similaire à la méthode Lookup, mais fournit des options semblables à celles de la méthode LocateEx.

Recherche en utilisant un filtre

Cette méthode de recherche d'enregistrement a été introduite dans FireDAC par mesure de compatibilité avec les composants BDE. Elle peut être complètement remplacée par la méthode LocateEx. L'approche consiste à utiliser les méthodes suivantes :

  • FindFirst -- trouve le premier enregistrement satisfaisant le prédicat.
  • FindNext -- trouve l'enregistrement suivant satisfaisant le prédicat après l'enregistrement en cours.
  • FindPrior -- trouve l'enregistrement satisfaisant le prédicat précédant l'enregistrement en cours.
  • FindLast -- trouve le dernier enregistrement satisfaisant le prédicat.

Pour commencer une recherche, l'application doit spécifier le prédicat sous la forme d'une expression booléenne dans la propriété Filter. Sachez que cette méthode ne peut pas être utilisée pour rechercher un enregistrement dans un ensemble de données filtré. De plus, le filtre n'est pas activé et est uniquement utilisé pour localiser un enregistrement. Par exemple :

 FDQuery1.Filter := 'Price >= 1000 and Price <= 2000';
 if FDQuery1.FindFirst then
   ShowMessage('Found !');
 ...
 if FDQuery1.FindNext then
   ShowMessage('Found !');

Recherche en utilisant un index et une valeur de clé

Cette méthode utile de recherche d'enregistrement a été introduite dans FireDAC par mesure de compatibilité avec les composants BDE. L'approche consiste à utiliser les méthodes suivantes :

  • SetKey -- définit l'ensemble de données sur le mode dsSetKey, ce qui vous permet de spécifier les valeurs du champ d'index.
  • GotoKey -- recherche un enregistrement exact en utilisant les valeurs du champ d'index spécifiées après un appel à la méthode SetKey.
  • GotoNearest -- recherche un enregistrement exact ou l'enregistrement suivant en utilisant les valeurs du champ d'index spécifiées après un appel à la méthode SetKey.
  • FindKey -- recherche un enregistrement exact en utilisant les valeurs du champ d'index spécifiées.
  • FindNearest -- recherche un enregistrement exact ou l'enregistrement suivant en utilisant les valeurs du champ d'index spécifiées.

L'index en cours doit être défini avant d'appeler ces méthodes. Par exemple :

 FDQuery1.IndexFieldNames := 'ORDERID';
 FDQuery1.SetKey;
 FDQuery1.FieldByName('ORDERID').AsInteger := 10150;
 if FDQuery1.GotoKey then
   ShowMessage('Order is found')
 else
   ShowMessage('Order is not found');

Autres options

La plupart des méthodes de recherche renvoient True lorsqu'un enregistrement est trouvé. Il est aussi possible que l'application vérifie la propriété Found de l'ensemble de données.

Veuillez également noter que FireDAC ne supporte pas la recherche de champs des types fkCalculated et fkLookup. Toutefois, l'application peut utiliser les champs fkInternalCalc et fkAggregate dans les opérations de recherche.

Voir aussi