Fonction OnFilterRecord

Résolu
ikremnitz Messages postés 10 Date d'inscription lundi 21 mars 2005 Statut Membre Dernière intervention 19 novembre 2009 - 27 août 2008 à 17:55
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 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.

9 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
28 août 2008 à 18:18
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
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
27 août 2008 à 22:04
bonsoir,

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

cantador
0
ikremnitz Messages postés 10 Date d'inscription lundi 21 mars 2005 Statut Membre Dernière intervention 19 novembre 2009
28 août 2008 à 10:09
Bonjour,

La propriété Filtered est bien à True.

Ilona
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
28 août 2008 à 13:11
sur le clic du RadioGroup :

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

cantador
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ikremnitz Messages postés 10 Date d'inscription lundi 21 mars 2005 Statut Membre Dernière intervention 19 novembre 2009
28 août 2008 à 15:06
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
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
28 août 2008 à 15:22
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
0
ikremnitz Messages postés 10 Date d'inscription lundi 21 mars 2005 Statut Membre Dernière intervention 19 novembre 2009
28 août 2008 à 16:58
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
0
ikremnitz Messages postés 10 Date d'inscription lundi 21 mars 2005 Statut Membre Dernière intervention 19 novembre 2009
29 août 2008 à 11:34
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
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
29 août 2008 à 11:41
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
0
Rejoignez-nous