Lorsque nous exploitons un ensemble de données, nous devons souvent filtrer les données. Par exemple : une table de données nommée Customer contient CustNo, CustName, Country, Address, Phone, State, TaxRate et d'autres champs. Si vous souhaitez uniquement afficher le pays, Pour les enregistrements clients avec la Chine ou les numéros de clients supérieurs à 1 000, l'ensemble de données doit être filtré. En résumé, il existe les méthodes de filtrage suivantes :
1. Utilisation des propriétés de filtre de TTable et TQuery
1. Définissez la propriété Filter au moment de la conception
Par exemple, définissez Filter sur : Country='China', puis modifiez la propriété Filtered sur True (notez que le filtrage n'est efficace que lorsque Filtered est True). Vous ne pouvez alors voir que les enregistrements dont le contenu du champ Pays correspondant est « Chine ».
Les opérateurs pouvant être utilisés lors de la définition du filtre sont : <, >, <=, >=, =, <>, AND, OR, NOT.
Par exemple, si vous définissez le filtre sur : CustNo>=1000 etCustNo<=5000, vous ne pouvez voir que les enregistrements client dont les numéros de client sont compris entre 1 000 et 5 000.
2. Filtrage dynamique pendant l'exécution du programme
Pour modifier la propriété Filter pendant l'exécution du programme, cela inclut deux situations :
(1) Le côté droit de l'opérateur est une constante, par exemple : Table1Filter:=′State′+′=′+′′′HI′′′ ;
Remarque : Les constantes de chaîne doivent être entourées de trois paires de guillemets simples.
(2) Le côté droit de l'opérateur n'est pas une constante, il peut s'agir d'une valeur spécifiée par une variable ou d'une valeur donnée par une zone de saisie. À ce stade, vous devez utiliser la fonction Format. La forme du code est la suivante : Table1Filter:=Format(′State′+′=′+′′′%S′′′,[StateValue]); où StateValue est une variable de chaîne à laquelle une valeur a été attribuée et qui peut également être sous d'autres formes, par exemple : Edit1Text.
2. Utilisez ApplyRange pour filtrer les enregistrements dans l'ensemble de données
En exécutant le code suivant, vous ne pourrez voir que les enregistrements clients dont les numéros de client sont compris entre 1 000 et 5 000. Les différents processus qui composent cette routine sont :
ApplyRange, SetRangeStart, SetRangeEnd.
Tableau 1SetRangeStart ;
Tableau 1[′CustNo′] :=1 000 ;
Tableau1SetRangeEnd ;
Tableau 1[′CustNo′] :=5 000 ;
Tableau 1 : Appliquer la plage ;
Remarque : Ce processus ne fonctionne que sur les champs indexés. Si vous souhaitez filtrer en fonction de champs non indexés, autant utiliser une petite astuce : créer un faux index. La méthode d'implémentation est la suivante : Table1.IndexFieldNames:=nom du champ ; Delphi fournit également des méthodes simples pour appeler SetRangeStart, SetRangeEnd et ApplyRange, par exemple : Table1.SetRange([Edit1.Text],[Edit2.Text]);
3. Utilisez l'événement OnFilterRecord pour filtrer. L'événement OnFilterRecord vous permet de créer des programmes de filtrage basés sur des champs non saisis, par exemple :
PRocedureTForm1.Table1FilterRecord(DataSet:TDataSet;varAccept:Boolean);
commencer
Accepter :=DataSet[′State′]=′CA′;
fin;
4. Instructions SQL utilisant le contrôle TQuery
1.Les instructions SQL ne contiennent ni variables ni paramètres
Sélectionner*duClient
OùCustNo>=1000 etCustNo<=5000
2.Les instructions SQL contiennent des paramètres
Sélectionner*duClient
OùCustNo>=:CustNo
Le paramètre CustNo reçoit une valeur lors de l'exécution.
3.Les instructions SQL contiennent des variables
À ce stade, le code permettant d'ajouter des instructions SQL au contrôle TQuery doit être écrit comme ceci :
Requête1.Fermer ;
Requête1.SQL.Clear ;
Query1.SQL.Add(Format(′Select*fromCustomer′+′′+′whereState=′+′′′%S′′′,[StateValue]));
Query1.Open; Parmi les quatre méthodes ci-dessus, la quatrième est la plus puissante et la plus flexible à utiliser.