[Résolu] Filtrage résultats @dbLookup

Forum destiné aux questions sur le développement : Formules, LotusScript, Java ...

[Résolu] Filtrage résultats @dbLookup

Messagepar camilleB » 04 Nov 2012 à 15:32

Bonjour,
j'ai créé une vue permettant de faire une recherche par clé:
Type | codeType | Nature |colonne composite masquée|

je récupère le résultat d'un @dbLookup de la forme:
libélléNatureA~option1 Détail LibélléA
libélléNateureA~option2 Détail LibélléA
libélléNatureA~option3 Détail LibélléA etc....

Je voudrais par la suite filtrer cette liste en fonction de la sélection du champ nature et récupérer uniquement les éléments correspondants dans une autre champ Détails nature.
Je sèche un peu en formula!
Je teste avec @keyword en ce moment, mais sans résultat.
Merci pour vos lumières.
cdt
camille
Dernière édition par camilleB le 08 Nov 2012 à 20:50, édité 1 fois.
camilleB
Apprenti-posteur
Apprenti-posteur
 
Message(s) : 176
Inscrit(e) le : 18 Jan 2012 à 23:45

Re: Filtrage résultats @dbLookup

Messagepar Michael DELIQUE » 04 Nov 2012 à 18:21

salut,

si je comprend bien tu veux faire une sorte de @dblookup sur le résultat d'un @dblookup ?
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Re: Filtrage résultats @dbLookup

Messagepar Smicky » 04 Nov 2012 à 19:17

Tu peux iterer sur les résultats de ton @DBLookup avec un @For

par ex

tmp := @DBLookup...
@If(@IsError(tmp) ; @Return(""); "");

@For(i:=1 ; i<=@Elements(tmp) ; i:=i+1 ;
@Do(..la tu testes , tu filtres... tmp[i]...)
)
Smicky
Posteur habitué
Posteur habitué
 
Message(s) : 232
Inscrit(e) le : 09 Déc 2006 à 15:27
Localisation : Paris

Re: Filtrage résultats @dbLookup

Messagepar roubech » 04 Nov 2012 à 19:40

Tu parles de 2 champs Type et Nature ?
Le 1er, Type, avec liste de choix
Le 2nd, Nature, avec liste de choix dépendant du 1er champ
Si c'est ça en général, pour ce genre de chose, on fait le 2ème DbLookup après que la valeur du 1er champ a été sélectionnée ...
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Re: Filtrage résultats @dbLookup

Messagepar camilleB » 05 Nov 2012 à 11:27

Salut roubech,
Oui c'est bien çà! La clé de lookup est bien le type! Elle renvoie bien toutes les lignes associées.
Après je récupère la nature par un @word.
En fait je e voulais pas créer une vue et un masque pour chaque recherche mais la vue à évoluée et je n'ai pas envie de tout casser! Je maintiens une vue et un masque!
Michael : oui dans l'idéal si on pouvait faire ce genre de filtre sur un liste!!!

cdt
camille
roubech a écrit:Tu parles de 2 champs Type et Nature ?
Le 1er, Type, avec liste de choix
Le 2nd, Nature, avec liste de choix dépendant du 1er champ
Si c'est ça en général, pour ce genre de chose, on fait le 2ème DbLookup après que la valeur du 1er champ a été sélectionnée ...
camilleB
Apprenti-posteur
Apprenti-posteur
 
Message(s) : 176
Inscrit(e) le : 18 Jan 2012 à 23:45

Re: Filtrage résultats @dbLookup

Messagepar Michael DELIQUE » 05 Nov 2012 à 12:07

j'avais en tete la meme réponse que Smicky
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Re: Filtrage résultats @dbLookup

Messagepar camilleB » 05 Nov 2012 à 15:09

Michael DELIQUE a écrit:j'avais en tete la meme réponse que Smicky


Salut,
Smicky?
ok je vais tenter la boucle sur le résultat renvoyé par le 1er @dbLookup!
cdt
camille
camilleB
Apprenti-posteur
Apprenti-posteur
 
Message(s) : 176
Inscrit(e) le : 18 Jan 2012 à 23:45

Re: Filtrage résultats @dbLookup

Messagepar roubech » 05 Nov 2012 à 21:16

tLkp := @DbColum() retourne une liste du genre
Type1#Nature1
Type1#Nature2
Type2#Nature3
Type2#Nature4
La liste de choix pour le champ Type : @Trim(@Unique(@Left(tLkp; "#")))
La liste de choix pour le champ Nature (à actualiser à chaque choix du Type : @Trim(@Right(tLkp; Type+"#"))

Mais je ne suis pas sur de bien voir ce que tu veux
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Re: Filtrage résultats @dbLookup

Messagepar camilleB » 05 Nov 2012 à 23:52

salut, fonctionne avec ce code:
Code : Tout sélectionner
source:="Notes":"noCache";
vue:="vwQualification";
cle:=type;
numcol:=4;
v:=@DbLookup(source;@DbName;vue;cle;numcol;[FailSilent]);
@If(@IsError(v);"Aucune données trouvées";v);
valeurs:=@If(@IsError(v);@Return(@Text(v));@Unique(@Sort(v)));
nature:=@Word(valeurs;"~";1);
@For(n:=1;n<@Elements(valeurs);n:=n+1;@Do(
@If(@Word(valeurs[n];"~";1)=natureselect;valtmp:=valtmp:@Word(valeurs[n];"~";2);"")));
@Trim(@Unique(nature)); 'on retourne ici la nature dans le champ nature
valtmp:=@Trim(valtmp); 'je supprime les valeurs à blancs
FIELD detailnaturetmp:=valtmp; 'j'alimente ici un item avec les valeurs triés


Ensuite le champ Detailnature affiche le contenu de l'item par formule!
C'était bien la bonne piste Roubech!
En fonction du Type sélectionné j'obtiens la nature. Puis en fonction de la nature j'obtiens les détails associés!
D'habitude je fais ce genre de chose avec une vue pour le type (dbcolumn) et la nature (dblookup clé = type sélectionné) puis une vue pour la recherche Nature - details (dblookup clé= nature sélectionnée) et autant de masque pour la création des docs...
Peut être qu'on peut encore optimisé ce code?

cdt
camille
camilleB
Apprenti-posteur
Apprenti-posteur
 
Message(s) : 176
Inscrit(e) le : 18 Jan 2012 à 23:45

Re: Filtrage résultats @dbLookup

Messagepar roubech » 06 Nov 2012 à 20:28

Si tu passes [FailSilent] en argument de ton @DbLookup, le test @IsError(v) ne sert à rien, car il est fait dans le lookup ...
Code : Tout sélectionner
v:=@DbLookup(source;@DbName;vue;cle;numcol;[FailSilent]);
@If(@IsError(v);"Aucune données trouvées";v);
valeurs:=@If(@IsError(v);@Return(@Text(v));@Unique(@Sort(v)));

doit pouvoir s'écrire plus simplement
Code : Tout sélectionner
v:=@DbLookup(source;@DbName;vue;cle;numcol;[FailSilent]);
valeurs:=@Unique(@Sort(v)));


Tu déclares une variable locale "nature",
tu ne t'en sert pas dans la boucle @For
et après tu fais une opération dessus mais tu ne récupères pas le résultat de l'opération
Code : Tout sélectionner
nature:=@Word(valeurs;"~";1);
...
@Trim(@Unique(nature)); 'on retourne ici la nature dans le champ nature

Si tu veux modifier le champ nature, il faut un
Code : Tout sélectionner
FIELD Nature := @Trim(@Unique(@Left(valeurs; "~")));


J'ai toujours fait sans @For ... mais il me semble que tu peux le remplacer par
Code : Tout sélectionner
@Trim(@Right(valeurs; natureselect+"~"))

sauf que je ne vois pas où est initialisée la variable natureselect, donc je suppose que c'est un champ

et sinon, tu le mets où ce code ?
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Re: Filtrage résultats @dbLookup

Messagepar camilleB » 08 Nov 2012 à 20:49

Salut,
le code est dans le champ NatureSelect - via Formule
Je vais suivre ton conseil et supprimé ce qui est en trop!
Pas facile quand on n'abuse pas des formules... :?
Merci
cdt
camille
camilleB
Apprenti-posteur
Apprenti-posteur
 
Message(s) : 176
Inscrit(e) le : 18 Jan 2012 à 23:45


Retour vers Développement