Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD10] Recherche multicritères

4 réponses
Avatar
wd_newbie
Bonjour,

je suis en train de convertir (recommencer serait plus adapt=E9) une
ancienne application faites sous FileMaker en application Windev.

L'un des bons c=F4t=E9s de FileMaker est que la recherche peut =EAtre faite
sur tous les champs visible de fa=E7on tr=E8s simple. je voudrais pour
offrir =E0 nouveau cette fa=E7on de faire a mes utilisateurs.
Apr=E8s avoir un peu cogit=E9 j'ai pens=E9 faire comme ceci :

1) clic sur un bouton =3D> passage en mode recherche
2) ce mode me vide tous mes champs par un raz() et bloquage de
certains boutons
3) l'utilisateur entre ses crit=E8res de recherche dans les diff=E9rents
champs.
4) clic sur lancer la recherche qui me lance ma procedure
"recherche_multicritere()":


<CODE>
PROCEDURE recherche_multicritere()
Cl=E9Parcours est une cha=EEne
sSQL est une cha=EEne =3D " 1=3D1 " // simplement pour =E9viter de controler
le AND sur le premier critere
// numero du membre
SI SAI_Numero_membre <> "" ALORS sSQL +=3D" AND numero_membre like '%" +
SAI_Numero_membre + "%' "
// nom du membre
SI SAI_Nom_membre <> "" ALORS sSQL +=3D" AND nom_membre like '%" +
SAI_Nom_membre + "%' "
// editeur
SI COMBO_editeur <> "" ALORS sSQL +=3D "AND editeur like '%"+
COMBO_editeur + "%' "


Cl=E9Parcours =3D HFiltre(Jeux,sSQL)
SI Cl=E9Parcours <> "" ALORS
HLitPremier(Jeux, Cl=E9Parcours)
charger_fenetre()
FIN
</CODE>

5) remettre les bouton dans l'=E9tat normal (premier / suivant / etc...)
C'est un exemple simple,mais avant de trop pousser dans ce sens, qu'en
pensez-vous ??

Et question subsidiaire :
lorsque je filtre un fichier avec le HFiltre() , comment trouver le
nombre d'enregistrements retourn=E9s ? j'ai essay=E9 avec HNbEnr() mais il
me retourne le total des fiches, je ne vais quand meme pas faite une
boucle avec total++ ??

Merci d'avance

Olivier

4 réponses

Avatar
Pascal F
Il se trouve que wd_newbie a formulé :
Bonjour,

je suis en train de convertir (recommencer serait plus adapté) une
ancienne application faites sous FileMaker en application Windev.

L'un des bons côtés de FileMaker est que la recherche peut être faite
sur tous les champs visible de façon très simple. je voudrais pour
offrir à nouveau cette façon de faire a mes utilisateurs.
Après avoir un peu cogité j'ai pensé faire comme ceci :

1) clic sur un bouton => passage en mode recherche
2) ce mode me vide tous mes champs par un raz() et bloquage de
certains boutons
3) l'utilisateur entre ses critères de recherche dans les différents
champs.
4) clic sur lancer la recherche qui me lance ma procedure
"recherche_multicritere()":


<CODE>
PROCEDURE recherche_multicritere()
CléParcours est une chaîne
sSQL est une chaîne = " 1=1 " // simplement pour éviter de controler
le AND sur le premier critere
// numero du membre
SI SAI_Numero_membre <> "" ALORS sSQL +=" AND numero_membre like '%" +
SAI_Numero_membre + "%' "
// nom du membre
SI SAI_Nom_membre <> "" ALORS sSQL +=" AND nom_membre like '%" +
SAI_Nom_membre + "%' "
// editeur
SI COMBO_editeur <> "" ALORS sSQL += "AND editeur like '%"+
COMBO_editeur + "%' "


CléParcours = HFiltre(Jeux,sSQL)
SI CléParcours <> "" ALORS
HLitPremier(Jeux, CléParcours)
charger_fenetre()
FIN
</CODE>

5) remettre les bouton dans l'état normal (premier / suivant / etc...)
C'est un exemple simple,mais avant de trop pousser dans ce sens, qu'en
pensez-vous ??

Et question subsidiaire :
lorsque je filtre un fichier avec le HFiltre() , comment trouver le
nombre d'enregistrements retournés ? j'ai essayé avec HNbEnr() mais il
me retourne le total des fiches, je ne vais quand meme pas faite une
boucle avec total++ ??

Merci d'avance

Olivier



plutot que d'utiliser hfiltre, utilise une requete SQL, tu auras directement le nombre d'enregistrements.

--
Pascal

Ne garder que le prénom pour me joindre
Avatar
wd_newbie
On 31 jan, 12:49, Pascal F wrote:
Il se trouve que wd_newbie a formulé :
...

plutot que d'utiliser hfiltre, utilise une requete SQL, tu auras directem ent le nombre d'enregistrements.

--
Pascal

Ne garder que le prénom pour me joindre



Oui, mais ... arrête moi si je dis des c.... , le contexte Hyperfile
n'est pas modifié lors de l'utilisation d'un HExécuteRequêteSQL().
Si je fais un FichierVersEcran(FEN_fiche_membres) je n'ai plus le
remplissage automatique des champs et quand je repasse en mode liste
(fenetre liste avec une table fichier) , je ne retrouve pas le
résultat de ma requete.

Est-ce correct ou alors je suis en train de me fourvoyer ?

Olivier
Avatar
JeAn-PhI
wd_newbie a formulé la demande :
Bonjour,

je suis en train de convertir (recommencer serait plus adapté) une
ancienne application faites sous FileMaker en application Windev.

L'un des bons côtés de FileMaker est que la recherche peut être faite
sur tous les champs visible de façon très simple. je voudrais pour
offrir à nouveau cette façon de faire a mes utilisateurs.
Après avoir un peu cogité j'ai pensé faire comme ceci :

1) clic sur un bouton => passage en mode recherche
2) ce mode me vide tous mes champs par un raz() et bloquage de
certains boutons
3) l'utilisateur entre ses critères de recherche dans les différents
champs.
4) clic sur lancer la recherche qui me lance ma procedure
"recherche_multicritere()":


<CODE>
PROCEDURE recherche_multicritere()
CléParcours est une chaîne
sSQL est une chaîne = " 1=1 " // simplement pour éviter de controler
le AND sur le premier critere
// numero du membre
SI SAI_Numero_membre <> "" ALORS sSQL +=" AND numero_membre like '%" +
SAI_Numero_membre + "%' "
// nom du membre
SI SAI_Nom_membre <> "" ALORS sSQL +=" AND nom_membre like '%" +
SAI_Nom_membre + "%' "
// editeur
SI COMBO_editeur <> "" ALORS sSQL += "AND editeur like '%"+
COMBO_editeur + "%' "


CléParcours = HFiltre(Jeux,sSQL)
SI CléParcours <> "" ALORS
HLitPremier(Jeux, CléParcours)
charger_fenetre()
FIN
</CODE>

5) remettre les bouton dans l'état normal (premier / suivant / etc...)
C'est un exemple simple,mais avant de trop pousser dans ce sens, qu'en
pensez-vous ??

Et question subsidiaire :
lorsque je filtre un fichier avec le HFiltre() , comment trouver le
nombre d'enregistrements retournés ? j'ai essayé avec HNbEnr() mais il
me retourne le total des fiches, je ne vais quand meme pas faite une
boucle avec total++ ??

Merci d'avance

Olivier



en utilisant HFiltre() la seule façon de compter est de faire une
boucle sans lecture pour accélérer le tout :
HPremier()
TantQue pas Hendehors
i++
HSuivant()
fin
en s'inspirant de la fenêtre "Recherche" du RAD il est facile de se
faire une classe pour effectuer les recherches par HFiltre()

--
Cordialement JeAn-PhI
Avatar
Pascal F
wd_newbie a couché sur son écran :
On 31 jan, 12:49, Pascal F wrote:
Il se trouve que wd_newbie a formulé :
...

plutot que d'utiliser hfiltre, utilise une requete SQL, tu auras directement le nombre d'enregistrements.

--
Pascal

Ne garder que le prénom pour me joindre



Oui, mais ... arrête moi si je dis des c.... , le contexte Hyperfile
n'est pas modifié lors de l'utilisation d'un HExécuteRequêteSQL().
Si je fais un FichierVersEcran(FEN_fiche_membres) je n'ai plus le
remplissage automatique des champs et quand je repasse en mode liste
(fenetre liste avec une table fichier) , je ne retrouve pas le
résultat de ma requete.

Est-ce correct ou alors je suis en train de me fourvoyer ?

Olivier



Tu peux modifier la liaison de tes champs MonChamp..LiaisonFichier dans ta procédure de recherche et le problème est résolu.

--
Pascal

Ne garder que le prénom pour me joindre