PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → WD27 - Filtrage champ table
WD27 - Filtrage champ table
Débuté par pm13, 05 avr. 2023 17:06 - 11 réponses
Membre enregistré
23 messages
Posté le 05 avril 2023 - 17:06
Bonjour à toutes et tous

Je débute sur Windev.

J'ai un champ table, 2 colonnes, une chaîne et une date

La table est soit liée au fichier en direct, soit par une requête.

Je souhaiterais filtrer la table sur la date. J'ai créer un sélecteur avec lequel je voudrais afficher soit tous les enregistrements, soit ceux qui ont une date renseignée, soit ceux qui n'ont pas de date.

J'avoue avoir un peu de mal avec les fonctions de filtrages et je n'arrive pas à obtenir le résultat souhaité.

Pourriez-vous me guider pour le code afin de pouvoir filtrer le champ table en fonction de la date ?

Merci d'avance.

Cordialement
Membre enregistré
1 029 messages
Posté le 05 avril 2023 - 17:20
Bonjour,
tu peux éxecuter une requête avec des paramètres en fonction de l'option sélectionnée dans le sélecteur, la table affichera les valeurs de la requête.
Membre enregistré
23 messages
Posté le 05 avril 2023 - 17:34
Bonjour Cédric_34

Merci pour la réponse.

J'ai identifié la méthode pour lister une date ou entre deux dates mais
je ne sais pas comment lister tous les enregistrements qui ont une date non renseignée (null) dans mon cas.

Est-ce que le choix de la valeur "null" dans le fichier de données pour un champ date est judicieux ... ?
Membre enregistré
1 029 messages
Posté le 05 avril 2023 - 18:13
quelque chose comme ça pour une date vide :
SELECT Visite.IDVisite AS IDVisite, Visite.Date AS DATE FROM Visite WHERE Visite.Date = ''
Membre enregistré
23 messages
Posté le 05 avril 2023 - 18:35
Effectivement en créant une requête de ce genre ça fonctionne avec l'argument Is Null au lieu de =''

Toutefois je voulais savoir si je pouvais réaliser la même opération avec un filtre sur la table afin de pouvoir
gérer facilement les filtres multiples et ne pas avoir à jongler avec plusieurs requêtes.

A tout hasard, si quelqu'un peut me confirmer si le choix de mettre la valeur Null par défaut pour un champ
de type Date est "judicieux" ou déconseillé ...

Merci pour votre aide.
Membre enregistré
371 messages
Posté le 05 avril 2023 - 21:33
Bonsoir

Personnellement j'ai toujours géré les rubrique date en les laissant vide lorsque je n'ai pas de date a renseigner.

Pour ta table :

Si tu dois alimenter ta table soit par le fichier soit parcla requete il faut gerer tout par programmation :
La propriété liaisonfichier te permettra de reporter les modifications dans le bon fichier lorsque tu utilise tableenregistre.

Pour le filtre, soit tu passe par ta requete avec un ou des parametres soit passe par tableactivefiltre...
Membre enregistré
189 messages
Posté le 06 avril 2023 - 06:57
Bonjour,
J'ai toujours travaillé avec les vues, pour filtrer des données. C'est bien plus rapide et plus souple que les requêtes et çà permet de faire des recherches multicritères sur des données avec affichage dans une table mémoire.
https://doc.pcsoft.fr/fr-FR/?3044159&name=hcreevue_fonction
On peut utiliser presque tous les types de champs et construire son filtre à la demande.
Pour les dates non renseignées, je les laisse vide (idem GB) et çà fonctionne bien
Bon courage
Membre enregistré
23 messages
Posté le 06 avril 2023 - 21:21
Bonjour GB et Denis,

Merci pour toutes ces informations. Je vais jeter un oeil du côté des vues...

GB, concernant TableActiveFiltre, j'ai fais des essais mais justement
je n'arrive pas à afficher une liste avec les dates non renseignées (ou de valeur Null dans mon cas).
Je pensais avoir trouvé avec le type filtre FiltreDifférent ou FiltreEgal à zéro mais ça n'a pas fonctionné

Je continue mes essais et recherches ...

Merci encore pour votre aide.
Membre enregistré
4 328 messages
Posté le 06 avril 2023 - 22:11
Bonjour,
Attention aux dates vides (i.e. ="")
Prenons la requête suivante :
SELECT
Client.PK_Client AS PK_Client,
Client.AK_NoClient AS NoClient,
Client.NDX_NomClient AS NomClient,
Client.NDX_DateInscription AS DateInscription
FROM
Client
WHERE
LEFT(Client.NDX_DateInscription,8) < '20230401'

Si la date est vide, les clients apparaîtront dans le résultat. Ce n'est pas le cas si la date est NULL.

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
189 messages
Posté le 07 avril 2023 - 03:11
@Voroltinquo
Bonjour,
Vous avez raison et c'est bien pour cela que je préfère les vues. C'est plus souple en programmation, en saisie et en passage de paramètres.
Je peux "façonner" mon filtrage comme je le souhaite, en ajoutant ou en retranchant des conditions en fonction du contexte (user, etc...).
Autre avantage des vues par rapport aux requêtes : leur rapidité d'exécution.
Désavantage : il faut coder un peu plus.
Posté le 07 avril 2023 - 09:59
pm13 a écrit :
> Bonjour à toutes et tous

Je souhaiterais filtrer la table sur la date. J'ai créer un sélecteur avec lequel je voudrais afficher soit tous les enregistrements, soit ceux qui ont une date renseignée, soit ceux qui n'ont pas de date.


Pour rester dans le cadre de votre demande de filtrage d'une table, essayer le code ci-dessous, à placer dans une combo/sélecteur dans l’événement "A chaque sélection"
C'est du code "de base" et qui fonctionne parfaitement, a adapter à vos besoins bien sûr.

SELON ComboChoix
// DeFiltre, affichage de toutes les données
CAS 1: TableDésactiveFiltre(TableDonnees.date)

// Filtre sur les dates supérieures au 01/01/1900, donc avec une date.
CAS 2: TableActiveFiltre(TableDonnees.date,filtreSupérieurOuEgal,"19000101")

// Filtre sur les dates non renseignées
CAS 3: TableActiveFiltre(TableDonnees.date,filtreEgal,"")

AUTRE CAS
FIN





Membre enregistré
23 messages
Posté le 12 avril 2023 - 16:39
Bonjour Cmoiall

Merci pour les informations.

J'ai fais la même procédure avec un sélecteur et cela semble fonctionner

Je ferai toutefois de nouveaux essais avec les Vues pour compléter.

Merci à tous et toutes pour votre aide.