
Envoyé par
qi130
OPEN avant de filtrer
L'open déclenche l'exécution de la requète. "Bricoler" les autres paramètres du ADOquery après l'exécution... je m'y hasarderais pas.
Pourquoi ne mets tu pas toute la requête dans le sql ?
Le champ Filter peut tout aussi bien être défini à la conception (mais dans ce cas s'il ne doit pas changer il faut préférer 1000 fois l'intégrer à la requete.) ou bien à l'exécution.
Dans ce dernier cas ca peut se faire avant l'open (pas trop d'intérêt autant appliquer les critère dans la requête encore une fois) ou après.
Et donc je dirais le seul vrai intérêt c'est de la faire après le Open de manière dynamique.
Cependant il faut connaitre les limites de ce filtre. Il est purement local, ce qui veut dire que l'intégralité des enregistrements de la requête sont demandés (enfin si on balaye toute la requête). Et c'est donc en local que le composant va décider de fournir ou non l'enregistrement suivant ce filtre.
Donc je dirais que c'est une manière assez simple de créer des filtres utilisateurs dynamiques.
Pour revenir au problème originel, essayez ceci :
Q.filter=' (champ <> 1 or (champ is Null)';
Mettez impérativement un espace apres le nom du champ et avant l'opérateur de comparaison.
Q.filter=' (champ <> '+QuotedStr('P')+') or (champ is Null)';
Partager