locate/fr

From Free Pascal wiki
Jump to navigationJump to search

English (en) français (fr)

Définition

Unité: FreePascal, unité db

    function  Locate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean; override;

Documentation officielle : Aucune.

Description

locate recherche un enregistrement dans le DataSet où correspondent les valeurs recherchées spécifiées avec les champs spécifiés. Si trouvé, la fonction retourne True et la position du curseur/l'enregistrement courant se déplace sur cet enregistrement.

KeyFields peut être un simple nom de champ ou une liste de noms de champ séparés par des points-virgules.

KeyValue peut être un variant ou un tableau de variants et le nombre des articles doit correspondre avec le nombre de champs spécifiés dans KeyFields, la correspondance est ordinale.

Les options de recherche peuvent être :

  • loCaseInsensitive : ignore la distinction majuscules/minuscules lors de la recherche.
  • loPartialKey : Correspond à des recherches partielles (au lieu de la clé complète). Remarque : Ceci fonctionne uniquement pour les champs de type chaîne, non pour les nombres/dates/monétaires etc, l'option est ignorée sur ces champs.
Light bulb  Remarque: Locate est seulement implémenté sur les DataSet non-unidirectionnels, i.e. vous devez pouvoir vous déplacer en arrière et vers l'avant du DataSet.
Light bulb  Remarque: Locate et lookup agissent à bas niveau dans le DataSet pour rechercher des enregistrements. Souvent, il est plus efficace de filtrer/limiter ce que l'on obtient dans le DataSet dès le départ i.e. en utilisant la clause SQL WHERE.

Exemples

Utilisation d'un DataSet TDBF en cherchant 'di Angelo', 'Di Angelo' etc. dans un champ appelé LASTNAME :

uses dbf, db
...
if MyDBF.Locate('LASTNAME','di Angelo',[loCaseInsensitive])then
  writeln('Found record.');


Utilisation de champs multiples pour trouver un enregistrement.

NB : vous devez ajouter l'unité variant dans votre clause uses.

uses Variants;
..
procedure LocateMyRecord;
var
  aCityID, aCountryID: integer;
begin
  if Locate('city_id;country_id', VarArrayOf([aCityID, aCountryID]), []) then
  begin
    DoSomething;
  end;
end;

Voir aussi