IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Une recherche très difficile !


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Par défaut Une recherche très difficile !
    Bonjour, je possède une table avec plusieurs colonnes comme ceci :

    Nom | Lecture | Orthographe | Numeration | Moyenne Gen


    Lecture,Orthographe,Numeration et Moyenne Gen sont bien entendu, des numériques.
    La table se remplit "directement", on entre les données qui s'inscrivent dans l'analyse.
    A la fin de la table, j'ai fait afficher la ligne "moyenne".
    La moyenne générale est calculée automatiquement a chaque modification a l'aide d'une procédure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Moyenne_gen = (Val(Lecture) + Val(Orthographe) + Val(Numeration)) / 3
    L'ennui, c'est que j'ai ajouté quelques colonnes en plus ( conjugaison, vocabulaire, etc ... ).

    Et, je voudrai que si un élève est absent a un controle ( = pas de note ) alors ce ne soit pas pris comme un "0" et la moyenne ne soit pas changé.

    Un exemple :
    Imaginons que je ne sois pas la lors de l'évalutaion d'Orthographe.
    Voila mes notes ( sur 10 ) :
    Lecture : 6
    Orthographe : abs
    Numeration : 8

    Actuellement, la moyenne serait calculée comme ceci :

    Moyenne_gen = (6 + 0 + 8) / 3
    Cela me ferait 4,7 de moyenne génerale.
    Or, étant absent, je n'ai pas eu "0"
    Donc, il me faudrait un code qui prenne en compte ce "abs"
    Moyenne_gen = (6+8) / 2
    = 7


    Donc, pour résumer :

    1) Il faudrait que lorsque je suis dans un champ "numérique" pour pouvoir afficher la moyenne au dessous de ma table, je puisse écrire "abs"

    2) Lorsque dans une note ( ou plusieur ) il y a "abs" il ne faut pas prendre en compte cette note.

    J'espère que vous m'avez compris, @+

  2. #2
    Membre éclairé Avatar de Le Shadow
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 265
    Par défaut
    Ton calcul devra se faire par programmation lors de l'affichage de la table...
    (code d'affichage d'une ligne de la table)

    Tu pourra faire les vérifications que tu veux pour faire ton calcul..

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Par défaut
    Mon calcul, je l'ai fait.
    Mais c'est juste qu'il m'est impossible de mettre pleins de "si"
    J'ai 13 notes a donner.
    Si je doit mettre un coe du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Si lecture ="" alors
    moyenne_gen=truc
    FIN
    SI lecture = "" ET orthographe="" alors
    moyenne_gen=truc
    FIN
    Impossible

  4. #4
    Membre éclairé Avatar de Le Shadow
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 265
    Par défaut
    Na...

    T'as besoin d'un compteur, et d'un accumulateur...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Si lecture<>"" alors
        Ct++
        Tot = NoteLecture
    fin
     
    Si Anglais<>"" alors
        Ct++
        Tot = Tot + NoteAnglais
    fin
     
    ...
     
    ainsi de suite pour chaque matiere
    A la fin, tu divise ton total par ton compteur...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Par défaut
    Je vois ...
    Mais, a quoi correspond "Ct++"

    Et, comment marquer dans un champ numérique "abs"
    OU, comment faire le total d'une COLONNE d'une table ?

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Par défaut
    C'est pas bien compliqué
    Tu comptes tes champs (colonnes ou matières comme tu veux) encore que logiquement tu sais combien il y en a.
    Tu comptes les zéros
    tu fais le total et tu divises par NbCol-NbZéro

    Exemple :
    Lecture : 6
    Orthographe : 0
    Numeration : 8
    Machin : 0
    Autre : 8
    Divers : 6

    Total = 28
    Nb de matières : 6
    Nb de zéros : 2
    Moyenne : 28/(6-2) = 7.5

    Simple no ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Par défaut Une recherche très difficile !
    Bonjour,

    J'ai fait une recherche en utilisant un code de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    sRubCléParcours = HFiltre(NomEta, "Nom~]'"+valNom+"'"...
    	+" ET Rs~]'"+ValDate+"'"...
    	+" ET Classes~]'"+ValClasse+"'"...
    	+" ET Difficultes~]'"+ValDifficultes+"'"...
    	+" ET Pai~]'"+ValPai+"'"...
    	+" ET Suites~]'"+ValSuites+"'"...
    	+" ET Suivi~]'"+ValSuivi+"'"...
    	+" ET Conclusion~]'"+ValConclusion+"'")
     
    FIN
     
     
    // Parcours des enregistrements filtrés
    HLitPremier(NomEta,sRubCléParcours)
    Mais, hélas, la recherche "CONTIENT" ne fonctionne pas comme je le voudrais, Il me faudrait une recherche qui soit de ce type :

    1) l'utilisateur rentre ses élèves ( clients )
    2) l'utilisateur rentre dans le fenetre "recherche", PAR exemple : dans "difficultes" : allergie, asthme

    3) Le programme lui trouve automatiquement tous les élèves qui ont dans leur difficultes allergie et asthme

    Le problème actuel est quel, si en entrant un élève, l'utilisateur écrit
    Asthme ; Allergie
    ( un espace, un point-virgule, un espace )
    Et que dans le recherche il écrive :
    Asthme,allergie
    ( pas d'espace, une virgule,pas d'espace )
    Ou encors
    Asthme; Allergie
    9a ne fonctionnera pas !
    Comment régler ce problème ?

    Merci, @+

  8. #8
    Membre expérimenté Avatar de JPDMJC
    Profil pro
    Inscrit en
    Février 2005
    Messages
    337
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 337
    Par défaut
    Bonjour,
    n'étant pas devin, je n'ai absolument rien compris au début de ton message. Qu'est ce que c'est que cette recherche "CONTIENT" ? etc.

    La seule chose que je puisse te dire, c'est qu'il ne faut pas laisser l'utilisateur saisir une liste de mots en mettant lui même le séparateur. Fais par exemple une liste (une listebox pour les difficultés, une autre pour les moutons ,etc), quelquechose que tu puisses contrôler sans quoi les "rhaaa ça marche pas" vont fuser

    Sinon, si tu veux laisser l'utilisateur mettre la chaine de séparation, il te faudra un code souple. Les expressions régulières (via vérifieExpressionRégulière) te seront alors d'un grand secours.
    Les expressions régulière permettent certes de vérifier la validité d'une chaîne par rapport à un schéma, mais elle permettent aussi - et ça j'adore - d'extraire des données issues de ce schéma (tout est marqué dans l'aide, mais pour les symboles il faut aller voir ailleurs, sur tout bon site ou manuel de regexp).

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Par défaut
    Bonjour,
    Les "rhaaa ça marche pas" ont déjà fusés ...
    La liste des difficultés est bien trop longue pour pouvoir les rentrées moi meme, et, il n'y en a pas de "fixe".
    Il faudrait une recherche "maxi-souple" qui ne prend pas en compte les espaces, les points, les virgules, les points-virgules, etc ...
    Je vais regarder les expressiosn régulières !

    je n'ai pas bien compris l'histoire des symboles et, comment utiliser ses expressions régulières dans mon cas ?
    ( après un tour dans l'aide, je n'ai aps bien compris )

  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 140
    Par défaut
    Je trouve ta recherche très compliquée.

    L'utilisation d'un tel HFiltre semble vraiment pas adapté, je ne sais pas si une raison particulière impose cette solution.
    Mais disons qu'une requête serait dans un premier temps + sympathique à utiliser.

    Ensuite, concernant tes recherches souples.
    Ca ne serait qu'un paramètre de ta requête que tu formaterais à l'aide des fonctions de phonétique, majuscule et autres...

    Les paramètres de la requête peuvent être mis à null pour ne pas agir sur les conditions de cette dernière.


    Ensuite, pour ce qui est de la recherche multi mot si on peut l'appeler ainsi, il n'y a pas de solution miracle, cependant tu peux décomposer cette entrée en plusieurs mots que tu modifie à l'aide des fonctions dont je parlais au dessus... et tu exécutes la requête, stocke les ID des résultats, et ainsi de suite jusqu'à avoir traité toute la chaine de recherche.
    Voir même lui passer la liste des chaines recherchés en fonction des espaces.

    Une autres solution serait éventuellement de mettre plusieurs champs de saisie où l'utilisateur ne peut entrer qu'un terme qui sera recherché.



    Il n'existe pas de solution miracle, même avec des expressions régulières, c'est à toi de traiter ces éléments du champ de recherche.

    J'avoue souvent utiliser la fonction de phonétique et ensuite découper la chaîne en fonction des éventuels espaces qu'il peut y avoir. Le tout combiné à une requête paramétrée bien + efficace qu'un HFiltre.

    Bonne suite.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 223
    Par défaut
    Bonjour,
    J'avou ne pas avoir tout compris ou, n'avoir rien compris ...
    Un exemple serait le bienvenue !

Discussions similaires

  1. Recherche de mots dans une séquence très longue
    Par Jasmine80 dans le forum Langage
    Réponses: 0
    Dernier message: 21/12/2007, 10h52
  2. Optimisation d'une recherche et mise à jour
    Par gandf dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/01/2005, 18h38
  3. Réponses: 8
    Dernier message: 10/09/2004, 17h30
  4. [VB.NET] Quel objet tableau pour une recherche indexée ???
    Par Kitano dans le forum Windows Forms
    Réponses: 7
    Dernier message: 02/09/2004, 09h38
  5. Enlever la surbrillance lors d'une recherche avec vi
    Par sekiryou dans le forum Applications et environnements graphiques
    Réponses: 8
    Dernier message: 04/03/2004, 13h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo