Fonction OnFilterRecord [Résolu]

Messages postés
10
Date d'inscription
lundi 21 mars 2005
Dernière intervention
19 novembre 2009
- - Dernière réponse : cs_cantador
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
- 29 août 2008 à 11:41
Bonjour,

je cherche à filtrer une requête qyListe sur un champ calculé. Pour cela j'utilise un RadioGroup rgFiltreType et la fonction OnFilterRecord

procedure TfmBilanBiologique.qyListeFilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
   case rgFiltreType.ItemIndex of     0 : Accept :(qyListe.FieldByName('TYPECTE').AsString 'M')     1 : Accept :(qyListe.FieldByName('TYPECTE').AsString 'S');
   end;
end;

Mais la donnée (qyListe.FieldByName('TYPECTE').AsString est toujours nulle (alors qu'elle est renseignée dans le DBGrid correspondant) et du coup le filtre ne fonctionne pas.

J'ai du louper quelque chose mais je ne vois pas quoi.
Pouvez-vous m'aider ?

Merci.
Afficher la suite 
A voir également:

Votre réponse

9 réponses

Meilleure réponse
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
3
Merci
arf, pas bien noté "sur champ calculé".
c'est normal que ça ne marche pas dans ce cas.

il faut trouver une autre solution :
créer un autre champ ou stocker l'information  etc..
les champs calculés, c'est bien mais faut pas en abuser car maintenant vu la puissance des bases de données et des pc, quelquefois, il est préférable de stocker l'information et de la tester ensuite.
c'est même plus rapide.

cantador

Merci cs_cantador 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_cantador
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
bonsoir,

Le filtrage est activé si la propriété Filtered a la valeur true

cantador
Commenter la réponse de cs_cantador
Messages postés
10
Date d'inscription
lundi 21 mars 2005
Dernière intervention
19 novembre 2009
0
Merci
Bonjour,

La propriété Filtered est bien à True.

Ilona
Commenter la réponse de ikremnitz
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
sur le clic du RadioGroup :

procedure TForm1.rgFiltreTypeClick(Sender: TObject);
begin
  Query1.filtered := false;
  Query1.Filtered := true;
end;

cantador
Commenter la réponse de cs_cantador
Messages postés
10
Date d'inscription
lundi 21 mars 2005
Dernière intervention
19 novembre 2009
0
Merci
Merci pour cette indication: c'est ce que j'ai fait et ça ne marche pas.

En fait, on passe bien dans la fonction mais le champ n'est pas encore calculé, il est vide. Du coup la requête n'affiche rien.

Ilona
Commenter la réponse de ikremnitz
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
J'ai testé et ça marche nickel chrome..
bien sûr avec données affichées dans un grid sur requête non filtrante
(select * from Matable)

sur les deuc clics dans le radiogroup, j'ai bien l'exécution des deux possibiltés du
OnFilterRecord avec affichage des données correctes (et sans rafraîchir)

cantador
Commenter la réponse de cs_cantador
Messages postés
10
Date d'inscription
lundi 21 mars 2005
Dernière intervention
19 novembre 2009
0
Merci
Je suis d'accord avec toi. Mais j'ai une petite difficulté supplémentaire: le champ sur lequel je trie est un champ calculé. Au moment où je passe dans la fonction, le calcul n'a pas encore été fait et le champ est vide => la requête est vide.

Ilona
Commenter la réponse de ikremnitz
Messages postés
10
Date d'inscription
lundi 21 mars 2005
Dernière intervention
19 novembre 2009
0
Merci
Merci d'avoir pris le temps de me répondre.

Une fois qu'on sait que ça ne marche, on trouve d'autres solutions peut-être un peu plus lourdes mais qui fonctionnent. Et c'est là l'essentiel.

Ilona
Commenter la réponse de ikremnitz
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
peut-être un peu plus lourdes



non pas forcément..
J'avais un case of dans un OnCalcField, je l'ai viré, j'ai stocké les infos à la place des champs calculés
résultat : 3 fois plus vite

il faut tester chaque solution en la chronométrant sans à priori..

cantador
Commenter la réponse de cs_cantador

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.