Fonction OnFilterRecord [Résolu]

ikremnitz 10 Messages postés lundi 21 mars 2005Date d'inscription 19 novembre 2009 Dernière intervention - 27 août 2008 à 17:55 - Dernière réponse : cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention
- 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 

9 réponses

Répondre au sujet
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 28 août 2008 à 18:18
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_cantador
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 27 août 2008 à 22:04
0
Utile
bonsoir,

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

cantador
Commenter la réponse de cs_cantador
ikremnitz 10 Messages postés lundi 21 mars 2005Date d'inscription 19 novembre 2009 Dernière intervention - 28 août 2008 à 10:09
0
Utile
Bonjour,

La propriété Filtered est bien à True.

Ilona
Commenter la réponse de ikremnitz
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 28 août 2008 à 13:11
0
Utile
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
ikremnitz 10 Messages postés lundi 21 mars 2005Date d'inscription 19 novembre 2009 Dernière intervention - 28 août 2008 à 15:06
0
Utile
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
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 28 août 2008 à 15:22
0
Utile
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
ikremnitz 10 Messages postés lundi 21 mars 2005Date d'inscription 19 novembre 2009 Dernière intervention - 28 août 2008 à 16:58
0
Utile
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
ikremnitz 10 Messages postés lundi 21 mars 2005Date d'inscription 19 novembre 2009 Dernière intervention - 29 août 2008 à 11:34
0
Utile
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
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 29 août 2008 à 11:41
0
Utile
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.