PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → WD 9 - Recherche dans une table (sans loupe)
WD 9 - Recherche dans une table (sans loupe)
Débuté par justinien, 23 jan. 2006 18:40 - 4 réponses
Posté le 23 janvier 2006 - 18:40
Bonjour à tous,

Le problème est simple à expliquer :

Le but est de permettre à l'utilisateur de "voyager" dans une table en
tapant au clavier
des lettres ou des chiffres correspondant aux informations d'une colonne
précise.
En fait, simuler le résultat de la loupe mais en restant dans la table.

Pourquoi ce besoin : Car il s'agit d'une application ou l'utilisation de la
souris doit
être quasi inexistante.

Un exemple : Supposons la table suivante :

Compte Libellé Montant
--------------------------------------------------
61001 Loyer 2500
61002 Location mobilier 1000
61003 Location voiture 500
61201 Entretien locaux 1200
etc


Ce qu'on aimerait : Pouvoir taper sur le clavier par exemple 612... et voir
le bandeau de
la table se positionner sur le premier compte commençant par 612... Ensuite
l'utilisateur
sélectionne le compte par ENTER par exemple ...

ET LE TOUT, sans passer par la loupe ou un champ de recherche ! Car cela
demande
de se trouver dans le Champ en question et dans ce cas on perd le focus de
la table.
Je ne veux pas que l'utilisateur soit obligé de se positionner dans la loupe
ou un champ
de recherche pour "voyager" dans la table !

Est-ce faisable +/- simplement avec WINDEV....

J'avais pensé à la commande TOUCHEENFONCEE !? Mais j'ai peur que ce ne soit
pas
aussi simple à mettre en place ...

Merci de votre aide :-)

Jean-Pascal Cochet
jpc@fiskobel.com
Posté le 24 janvier 2006 - 20:56
Ai eu un petit problème du même genre que j'ai résolu de la façon suivante. Si elle peut t'aider ...
=============================================================
Soit une fenêtre TARIF comportant une table TABLE (Affichage seulement)

Créer un champ de saisie Saisie , dans fenêtre TARIF, en dehors de TABLE, avec libellé &RECHERCHE (donc lettre d'appel R) Param : saisie non obligatoire, effacement auto
Désigner SAISIE comme 1er champ où se positionnera le curseur

Créer un bouton FICHE comme 2eme champ de positionnement curseur et donnant accès à la fiche détaillée.

Soient les colonnes de la table TABLE

col. CODE (chaine de caractère),col2,col3... etc

(La col CODE est supposée être déjà triée)

===== Code Entrée dans SAISIE: ============
moimeme="" // facultatif

===== Code Sortie de SAISIE ================

nTailleSaisie,I sont entiers
bTrouve est booléen
nTailleSaisie=SansEspace(Taille(MoiMême))

SI TableOccurrence(Table)>1 ALORS
SI nTailleSaisie>0 ALORS

POUR I=1 A TableOccurrence(Table)
TableSelectPlus(Table,I)
SI Gauche(Table.CODE,nTailleSaisie)~=MoiMême ALORS
btrouve=Vrai
SORTIR
FIN
FIN

SI btrouve=Faux ALORS
TableSelectPlus(Table,1)
RepriseSaisie(MoiMême)

FIN
FIN
FIN


======================================================
A l'ouverture de la fenêtre, le curseur se place dans le champ SAISIE
L'utilisateur tape la chaine recherchée (ou une partie de la chaine) puis ENTER (ou TAB)
Si la chaine est trouvée, la barre se positionne sur la ligne (premiers caractères égaux trouvés)
On peut alors ouvrir FICHE par un deuxième ENTER. Sinon on peut revenir sur SAISIE par la lettre d'appel "R". On ajuste avec les flèches haut et bas.

Au retour de FICHE le curseur se repositionne dans le champ SAISIE grâce à :
Reprisesaisie(SAISIE) en fin de code du bouton

Si la chaine n'est pas trouvée on revient au début de la table et dans le champ SAISIE

(On ne perd pas le focus de la fenêtre.)
=======================================================

Si le code recherché est immédiatement trouvé, deux coups d'ENTER successifs suffisent pour accéder à la fiche.
Posté le 24 janvier 2006 - 22:33
Bonsoir Charles,

Un grand merci pour ta réponse très pertinente.
Seul "hic", je veux éviter de devoir utiliser une lettre d'appel pour
revenir dans
le champ de saisie.

J'ai un programme développé en FoxPro (je crois) et il y avait des tables
toutes
simples qui permettaient cependant de "voyager" dans la table sans jamais
avoir
besoin de la souris. Cela dit, il y avait bien un champ de recherche qui
affichait
les touches tapées au clavier MAIS sans jamais perdre le focus de la table
ET
surtout sans jamais avoir besoin d'être pointé dessus !

Peut-être faut-il chercher au niveau de la gestion des événements windows
avec la
commande Evénement() !?

Qu'en penses-tu ?

Merci de ton aide !

JPC


"Charles" <mandoman@numericable.fr> a écrit dans le message de news:
43d6660d$1@news.pcsoft.fr...

Ai eu un petit problème du même genre que j'ai résolu de la façon
suivante. Si elle peut t'aider ...
=============================================================
Soit une fenêtre TARIF comportant une table TABLE (Affichage seulement)

Créer un champ de saisie Saisie , dans fenêtre TARIF, en dehors de TABLE,
avec libellé &RECHERCHE (donc lettre d'appel R) Param : saisie non
obligatoire, effacement auto
Désigner SAISIE comme 1er champ où se positionnera le curseur

Créer un bouton FICHE comme 2eme champ de positionnement curseur et
donnant accès à la fiche détaillée.

Soient les colonnes de la table TABLE

col. CODE (chaine de caractère),col2,col3... etc

(La col CODE est supposée être déjà triée)

===== Code Entrée dans SAISIE: ============
moimeme="" // facultatif

===== Code Sortie de SAISIE ================

nTailleSaisie,I sont entiers
bTrouve est booléen
nTailleSaisie=SansEspace(Taille(MoiMême))

SI TableOccurrence(Table)>1 ALORS
SI nTailleSaisie>0 ALORS

POUR I=1 A TableOccurrence(Table)
TableSelectPlus(Table,I)
SI Gauche(Table.CODE,nTailleSaisie)~=MoiMême ALORS
btrouve=Vrai
SORTIR
FIN
FIN

SI btrouve=Faux ALORS
TableSelectPlus(Table,1)
RepriseSaisie(MoiMême)

FIN
FIN
FIN


======================================================
A l'ouverture de la fenêtre, le curseur se place dans le champ SAISIE
L'utilisateur tape la chaine recherchée (ou une partie de la chaine) puis
ENTER (ou TAB)
Si la chaine est trouvée, la barre se positionne sur la ligne (premiers
caractères égaux trouvés)
On peut alors ouvrir FICHE par un deuxième ENTER. Sinon on peut revenir
sur SAISIE par la lettre d'appel "R". On ajuste avec les flèches haut et
bas.

Au retour de FICHE le curseur se repositionne dans le champ SAISIE grâce à
:
Reprisesaisie(SAISIE) en fin de code du bouton

Si la chaine n'est pas trouvée on revient au début de la table et dans le
champ SAISIE

(On ne perd pas le focus de la fenêtre.)
=======================================================

Si le code recherché est immédiatement trouvé, deux coups d'ENTER
successifs suffisent pour accéder à la fiche.

Posté le 26 janvier 2006 - 16:12
pas compliqué: tu met un champ dans lequel il va renter son numero à rechercher. par exe le nombre 620.
puis tu parcours ta table:
nbcompteur est un entier
pour nbcompteur=1 a tableoccurence(nom_de_la_table)
si table.nom_du_champ_a_recherche[ncompteur]=nom_du_champ(ou est le numero a rechercher alors
tableselectplus(table..valeur)
retour
sinon
table..valeur++
fin
Posté le 26 janvier 2006 - 16:14
j'aavais oublier:
avant deparcourir ta boucle il faut positionner le bandeau sur la 1er ligne de table avec:
tableselectplus(table,1)
comme ca a chaque recherche plus besoin de raccourci touche des que la recherche a trouve le champ a afficher le bandeau se positionne directement dessus.
voila :)