TExternalList.Open

TExternalList = class (TObject)Interface de TExternalListExemples de TExternalList

Permet de placer un curseur sur la liste filtrée

Syntaxe

procedure Open(filter: String)
filter: Filtre à appliquer sur la liste : CommaText ou syntaxe SQL (voir ci-dessous)

Remarques

  • Le curseur se positionnera au début du fichier et pointera sur la tête de la liste.
  • Il est possible d'utiliser les méthodes Next et EOF pour parcourir la liste.
  • On ne doit pas modifier (écriture, suppression) les données d'une liste qu'on parcourt via un Open. Il faut d'abord récupérer les PK des lignes à modifier, puis fermer la sélection avec un Close avant de faire les modifications.
  • On peut appliquer différents filtrages :
    • Aucun filtrage (non recommandé si on ne connait pas la volumétrie de la liste !) :
xl.Open(''); // Ouvre un curseur sur la liste complète
  • En passant la valeur de la clé primaire d'un enregistrement : (obsolète : privilégier la syntaxe avec "where")

Rq : ne supporte pas les PKey vides ou qui contiennent un "="

xl.Open('5'); // Ouvre un curseur sur la liste en ne retournant que l'enregistrement dont la valeur de clé primaire est 5
  • En passant une CommaText des valeurs de filtre pour les clefs primaires et/ou secondaires et/ou tertiaires : (obsolète : privilégier la syntaxe avec "where")

Rq : on n'est pas obligé de définir les 3 clés.

var filtre := TStrings.Create;
filtre.SetValue('PKey','A B C');
filtre.SetValue('SKey','D E F');
filtre.SetValue('TKey','12');

var xl:=TExternalList.Connect('MaListeExterne');
xl.Open(filtre.CommaText);

while not xl.EOF do begin
   //....
   xl.Next;
end;

xl.Close;
  • Il est également possible de définir des filtres avancés, cette fonctionnalité n'est supportée que par les listes de type "Stockage de données libres". La syntaxe est alors similaire à la syntaxe d'une clause SQL where, avec quelques restrictions:
    • seul l'opérateur AND est autorisé pour combiner les critères.
    • les comparateurs autorisés sont :
=teste si la valeur du champs est égale à la valeur indiquée (Case insensitive)
==teste si la valeur du champs est égale à la valeur indiquée (Case Sensitive)
<>teste si la valeur du champs est différente de la valeur indiquée
<teste si la valeur du champs est strictement inférieure à la valeur indiquée
>teste si la valeur du champs est strictement supérieure à la valeur indiquée
<=teste si la valeur du champs est inférieure ou égale à la valeur indiquée
>=teste si la valeur du champs est supérieure ou égale à la valeur indiquée
StartingWithseulement pour les valeurs chaînes, teste si la valeur du champs commence par la valeur indiquée
Containsseulement pour les valeurs chaînes, teste si la valeur du champs contient la valeur indiquée
  • Les chaînes de caractères doivent être encadrées soit par ", soit par ', soit par `.

Attention : si la chaîne recherchée contient " par exemple, il faudra utiliser un autre délimiteur.

xl.Open('where Commentaire=`Mon commentaire : "aaaaa"`');

Exemples

xl.Open('where NumClient=12 AND DateLivraison>01/01/2000 AND Article Contains "Vis"');

Tri de l'ensemble résultat: Dans le contexte des filtres avancés, il est également possible de définir une clause order by pour présenter un ensemble de données triées, la syntaxe est similaire à celle du SQL.

xl.Open('order by Nom, DateEntrée Desc');

Le tri peut être combiné à la clause Where comme ceci:

xl.Open('where Service="Compta" order by Nom, DateEntrée Desc');

Classification

XternalLists TExternalList