TExternalList.Open
| TExternalList = class (TObject) | Interface de TExternalList | Exemples 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;
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 |
| StartingWith | seulement pour les valeurs chaînes, teste si la valeur du champs commence par la valeur indiquée |
| Contains | seulement 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');