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

Sécurité Discussion :

Création automatique d'un login unique par concaténation


Sujet :

Sécurité

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 100
    Par défaut Création automatique d'un login unique par concaténation
    Bonjour
    Je souhaite automatiser la création d'un login unique par concaténation de la l'initiale du prénom + nom complet + "1".
    Mais si ce login existe déjà le "1" et remplacé par "2" et ainsi de suite.
    Je m'explique :
    DURAND Philippe ==> pdurand1
    DURAND Patrick ==> pdurand2


    un peu plus ...
    si le prénom est composé du type DURAND jean-Pierre il faudrait avoir jpdurand1

    Merci de vos informations précieuses
    Stéphane

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 100
    Par défaut
    J'ai résolu une partie de mon problème :
    j'ai réussi à concaténer mes champs [prenom] & [nom] tronqués avec la (les) première(s) lettre(s) de(s) prénom(s) ==>çà fonctionne aussi avec les prénoms composés.

    Je suis toujours bloqué avec la possibilité d'avoir des "homonimes", et je cherche la solution pour éviter les doublons.
    Le login devient [première(s) letrtre(s) du prénom]&[nom]&"un numéro incrémentiel" ==> mais je ne sais pas comment incrémenter sur ce doublon

    merci

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 100
    Par défaut
    Pour être plus complet, je vous joins les codes (ou fonction) réalisant mes premiers désirs :


    mettre en majuscule les initiales du prénom (même composé) :
    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
    Function MiseEnMajuscule(Chaine As String) As String
    Dim nCar As Integer  'Compteur (position dans la chaine à traiter)
    Chaine = Trim$(Chaine) 'Récupère la chaîne sans les espaces facultatifs
    'Traitement spécifique sur le premier caractère
    MiseEnMajuscule = UCase$(Left(Chaine, 1))
    'Début de la boucle sur les autres caractères
    For nCar = 2 To Len(Chaine)
    'Teste le caractère précédent (" " ou "-")
    If (Mid$(Chaine, nCar - 1, 1) = " ") Or (Mid$(Chaine, nCar - 1, 1) = "-") Then
    'Si c'est vrai, mettre en majuscule le caractère courant
    MiseEnMajuscule = MiseEnMajuscule & UCase$(Mid(Chaine, nCar, 1))
    Else
    'Si c'est faux, mettre en minuscule le caractère courant
    MiseEnMajuscule = MiseEnMajuscule & LCase$(Mid(Chaine, nCar, 1))
    End If
    'Fin de la boucle sur les caractères
    Next
    End Function
    Concaténer les initiales du prénom (même composé) avec le nom :
    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
    Function InitialePrenom(Chaine As String) As String
    Dim nCar As Integer  'Compteur (position dans la chaine à traiter)
    Chaine = Trim$(Chaine) 'Récupère la chaîne sans les espaces facultatifs
    'Traitement spécifique sur le premier caractère
    InitialePrenom = Left$(Chaine, 1)
    'Début de la boucle sur les autres caractères
    For nCar = 2 To Len(Chaine)
    'Teste le caractère précédent (" " ou "-")
    If (Mid$(Chaine, nCar - 1, 1) = " ") Or (Mid$(Chaine, nCar - 1, 1) = "-") Then
    'Si c'est vrai,récupére le caractère courant
    InitialePrenom = InitialePrenom & Mid$(Chaine, nCar, 1)
    ''Else
    'Si c'est faux, récupére le caractère courant
    ''InitialePrenom = InitialePrenom & LCase$(Mid(Chaine, nCar, 1))
    End If
    'Fin de la boucle sur les caractères
    Next
    End Function
    Ces fonctons sont appelées dans un code comme celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Prenom_utilisateur_LostFocus()
    If Len(Me.Prenom_utilisateur) <> 0 Then
    Me.Prenom_utilisateur = MiseEnMajuscule(Me.Prenom_utilisateur)
    Me.Utilisateur = StrConv(InitialePrenom(Me.Prenom_utilisateur), vbLowerCase) & StrConv(Me.Nom_utilisateur, vbLowerCase)
    End If
    End Sub
    Mais je n'ai toujours ma solution pour éviter le doublon

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Il y a plusieurs solutions pour éviter les doublons en voici deux parmi d'autres.

    1 - Indexé le champ qui contient cette donnée de manière à refuser les doublons (c'est dans les propriétés du champ lorsque ta table est en mode création). Il y aura un message, mais pas top au niveau visu.


    2 - Faire un test avec la fonction de domaine DLookup, pour chercher si celui-ci existe déjà.

    Voilà quelques pistes, et de nombreuses discussions sur le forum (coté VBA Access) parlent des doublons.

    Philippe

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 100
    Par défaut
    Bonjour
    désolé pour ma réponse tardive.

    Merci pour cette première réponse, mais il me semble que le test dlookup ne marcherai pour 2 doublons maxi

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    Citation Envoyé par stefane26 Voir le message
    Merci pour cette première réponse, mais il me semble que le test dlookup ne marcherai pour 2 doublons maxi
    Faux le DLookup te permettra de chercher une occurrence, s'il y en a pas, tu peux ajouter une donnée, s'il y en a une tu incrémente ta numérotation et tu ajoutes ta donnée.

    Philippe

  7. #7
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    salut Philippe et bienvenu stefane26,

    ou avec DCount() dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Utilisateur = Me.Utilisateur & (DCount("*","latable","login like '" & Me.Utilisateur & "?'")+1)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 100
    Par défaut
    Bonjour et merci pour cette réponse.
    Mais, je suis quelqu'un de compliqué
    Imaginons que nous ayons 2 login identiques => le résultat sera par exemple :

    sbc1
    sbc2

    Maintenant, imaginons que le premier login (sbc1) disparaisse : un nouveau login identique deviendrait :

    sbc3

    alors que j'aimerais que le chiffre reprenne le numero manquant soit : sbc1

    MErci

  9. #9
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    he bien comme te l'a dit Philippe, un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    i=1
    while not isnull(dlookup("login","latable","login like '" & Me.Utilisateur & i & "'")):i=i+1:wend
    Me.Utilisateur = Me.Utilisateur & i

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 100
    Par défaut
    Merci Vodiem
    Cela fonctionne parfaitement

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/05/2015, 08h52
  2. Réponses: 5
    Dernier message: 09/02/2014, 14h32
  3. Création automatique d'un login
    Par serges dans le forum ASP.NET
    Réponses: 9
    Dernier message: 08/10/2009, 15h10
  4. création automatique de mail par vba
    Par nico0007 dans le forum VBA Outlook
    Réponses: 9
    Dernier message: 07/11/2007, 13h06
  5. Algo de création de chaine par concaténation de variables
    Par Zhebulon dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 13/04/2006, 14h37

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