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 :

recherche dans une colonne d'un champ Table pour éviter les doublons [WD17]


Sujet :

WinDev

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut recherche dans une colonne d'un champ Table pour éviter les doublons
    Bonjour,

    Je débute sous WIndev et malgré mes recherches je ne trouve pas comment lancer une recherche dans une colonnes d'une table pour vérifier si mes valeurs sont identiques avec la saisie que je viens de faire.

    En somme c'est de la gestion de doublons, je veux interdire à l'utilisateur de saisir dans une colonne définie un doublon.

    Voici le code que j'ai mis en place et qui ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    //Sortie de Col_Utilisateurs(Table_LstUtilisateurs)
     
    Colenr est une chaîne
     
    Colenr= TABLE_LstUtilisateurs.COL_Utilisateurs[TableSelect(TABLE_LstUtilisateurs)]
     
     
    SI TableCherche(COL_Utilisateurs,Colenr)<>-1 ALORS
    	RETOUR
    	SINON
    	Avertissement("Cet utilisateur existe déjà ! Vous ne pouvez pas continuer !")
    FIN

    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    Salut!

    Voici en gros le principe :

    La ligne (colonne) en cours de saisie est donnée par Tableselect(MaTable)

    Tu dois parcourir ta table de la première à la dernière ligne (non en cours de saisie) et vérifier si ta saisie existe!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Masaisie est une chaine = MaTable.Col
    POUR i=1 _A_ Tableselect(MaTable)-1
      SI MaTable.Col[i]=Masaisie ALORS
        // traitement doublon trouvé
        SORTIR
      FIN
    FIN
    A vérifier, je n'ai pas WD sous la main

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Antarctique

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 17
    Points : 39
    Points
    39
    Par défaut
    Ajoute un bouton invisible "BTN_Verifie" avec ce code :

    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
    16
    17
    18
    i est un entier
    Occu est un entier = TableOccurrence(TABLE_LstUtilisateurs)
     
    SI TableSelect(TABLE_LstUtilisateurs) < 0 ALORS
    	RETOUR
    FIN
     
    SI TableSelect(TABLE_LstUtilisateurs) = 1 OU Occu = 1 ALORS
    	RETOUR
     
    FIN
     
    POUR i = Occu-1 A 1 PAS -1
    	SI COL_Utilisateurs[i] = COL_Utilisateurs ALORS
    		Avertissement("Cet utilisateur existe déjà ! Vous ne pouvez pas continuer !")
    		RepriseSaisie(COL_Utilisateurs)
    	FIN
    FIN
    remplace ton //Sortie de Col_Utilisateurs(Table_LstUtilisateurs)

    par ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ExécuteTraitement(BTN_Verifie,trtClic)
    PS, ce code tolère l'ajout des enregistrements avec des utilisateurs "vides" alors fais attention a ce petit détail aussi dans tes contrôles

  4. #4
    Membre éprouvé Avatar de miripesage
    Homme Profil pro
    gerant
    Inscrit en
    Novembre 2009
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : gerant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 725
    Points : 1 156
    Points
    1 156
    Par défaut
    bonjour, autre manière plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Colenr est une chaîne= TABLE_LstUtilisateurs.COL_Utilisateurs[TableSelect(TABLE_LstUtilisateurs)]
     
    POUR i=1 _A_ Tableselect(TABLE_LstUtilisateurs)-1
    si TABLE_LstUtilisateurs.COL_Utilisateurs[i] = Colenr alors
      Avertissement("Cet utilisateur existe déjà ! Vous ne pouvez pas continuer !")
      RETOUR
     SINON
      Iinfo("L'utilisateur n'existe pas")
    FIN
    Au travail, le plus difficile, c'est d'allumer la petite lampe du cerveau. Après, ça brûle tout seul!

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Antarctique

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 17
    Points : 39
    Points
    39
    Par défaut
    Après réflexion voici le bon code

    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
    i est un entier
    j est un entier = TableSelect(TABLE_LstUtilisateurs)
    Occur est un entier = TableOccurrence(TABLE_LstUtilisateurs)
     
     
    SI j < 0  OU  Occur <= 1 ALORS
    	RETOUR
    FIN
     
    POUR i = 1 A Occur
    	SI COL_Utilisateurs[i] = COL_Utilisateurs ET i <> j ALORS
    		Avertissement("Cet utilisateur existe déjà ! Vous ne pouvez pas continuer !")
    		RepriseSaisie(COL_Utilisateurs)
    	FIN
    FIN

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut
    Merci beaucoup pour votre aide, ca marche mais je m'aperçois de quelques problèmes de gestion :

    Voici mon code :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
     
     
    i est un entier
    Colenr est une chaîne=TABLE_LstUtilisateurs.COL_Utilisateurs[TableSelect(TABLE_LstUtilisateurs)]
     
     
    POUR i=1 _A_ TableSelect(TABLE_LstUtilisateurs)-1
     
    		SI TABLE_LstUtilisateurs.COL_Utilisateurs[i]=Colenr ALORS
     
    			Avertissement("Cet utilisateur existe déjà ! Création Annulée")
    			ExécuteTraitement(BTN_SupprLstuti1,trtClic)
     
     
     
    		FIN
    FIN
     
    		SI Colenr="" OU Colenr=" " ALORS
     
    			Avertissement("Vous ne pouvez pas créer de champs vide ! Création Annulée")
     
    			ExécuteTraitement(BTN_SupprLstuti1,trtClic)
     
    		FIN
    Les problèmes sont les suivants :

    - La comparaison tient compte des majuscules/minuscules et accents. Je voudrais que cela n'en tienne pas compte.

    - J'ai prévu la chaîne vide mais si l'utilisateur tape 10 fois sur la barre d'espace mon code ne considérera pas que l'enregistrement est vide.

  7. #7
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    Salut!

    1°) Voir l'aide sur sanscasse

    2°) Voir l'aide sur Sansespace()

    Bonne continuation

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    J'ai déjà vu l'aide, mais je n'arrive pas à mettre en application dans mon code.

    Merci d'avance.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut
    J'ai essayé ce code mais sans succés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    SI ChaîneFormate(TABLE_LstUtilisateurs.COL_Utilisateurs[i]=Colenr,ccSansCasse) ALORS

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut
    Je vous remercie à tous de votre aide. Tout est OK.

    Pour le problème de casse j'ai essayé le code suivant qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    SI ChaîneFormate(TABLE_LstUtilisateurs.COL_Utilisateurs[i],ccMajuscule+ccMinuscule+ccSansAccent)=ChaîneFormate(Colenr,ccMajuscule+ccMinuscule+ccSansAccent) ALORS

    Merci encore.

  11. #11
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonsoir,

    Vous pouvez avantageusement remplacer la boucle de test par la fonction TableCherche (V15 et suivantes) qui me semble taillée sur mesure pour votre problème.

    Hemgé

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut
    Bonsoir,

    J'ai voulu au départ utiliser Tablecherche mais je n'ai pas réussi à le faire marcher.

  13. #13
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonsoir,

    Effectivement, j'ai vu votre message original.
    Je suis étonné. A priori le code était correct.

    Vous n'y avez pas indiqué ce qui ne fonctionnait pas.
    Avez-vous tracé le code pour voir où cela foirait ?

    Est-ce une table fichier ou une table mémoire ?
    Dans une table fichier, la colonne de recherche doit être liée à une rubrique de type clé.
    Quant à la casse,
    Dans une table mémoire, la recherche effectuée avec la fonction TableCherche n'est pas sensible à la casse (majuscules/minuscules).
    Dans une table fichier, la recherche effectuée avec la fonction TableCherche tient compte des caractéristiques de recherche définies dans l'analyse pour la rubrique liée à la colonne de recherche (sensible ou non à la casse, ...).
    Donc, première chose à vérifier : table fichier ou table mémoire ? et si table fichier, liaison ou non à une rubrique.

    Si Table mémoire ou table fichier avec colonne liée à une rubrique, alors il faut tracer.

    Ceci, pour autant que vous ayez envie de creuser puisque le problème est résolu.

    Bonne soirée

    Hemgé

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 187
    Points : 69
    Points
    69
    Par défaut
    Bonsoir,

    C'est une table mémoire.

    Je vais creuser un peu quand même dés que j'aurais un peu de temps.

    Merci pour tout.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WB17] Evénement sur clic dans une colonne d'un champ table
    Par jaymzwise dans le forum WebDev
    Réponses: 5
    Dernier message: 03/03/2015, 10h08
  2. recherche dans une colonne de la table (java-->base de donnees)
    Par lucaazori1988 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 11/01/2010, 21h42
  3. Recherche dans une colonne
    Par david71 dans le forum Access
    Réponses: 4
    Dernier message: 26/06/2007, 20h37
  4. Recherche dans une colonne tableau Word
    Par cath007 dans le forum VBA Word
    Réponses: 2
    Dernier message: 13/06/2007, 17h35
  5. [VBA-E] Recherche dans une colonne
    Par snowkhan dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/03/2006, 14h21

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