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

VBA Access Discussion :

Access sensible à la casse


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Access sensible à la casse
    Bonjour chers développeurs
    j'ai créer un formulaire LOGIN sous access 2007 pour se s'authentifier grâce a un identifiant et un mot de passe dont les informations sont dans une table identification.

    ma préoccupation est la suivant comment faire pour qu'Access respecte la casse de saisie car j'ai remarqué que pour l'utilisateur A1 avec pour login= A1 et mot de passe = A1. Si l'utilisateur A1 fait login = A1 et le mot de passe = a1, il a accés au programme alors que A1 est diffèrent de a1.

    Alors est il possible d'obliger Access à faire la différence entre les casses de saisie?

    Merci pour vos réponses

  2. #2
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    kave,

    Access étant effectivement insensible à la casse, tu peux utiliser une fonction de conversion de tes chaînes et ainsi les comparer sous forme Hexadécimale.

    Insères cette fonction dans un module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function transforme_chaine(Mavaleur) As String
        If Nz(Mavaleur, "") = "" Then transforme_chaine = "": Exit Function
        For i = 1 To Len(Mavaleur)
            transforme_chaine = transforme_chaine & Hex(Asc(Mid(Mavaleur, i, 1)))
        Next
        '
    End Function
    L'utilisation de ta fonction te permettra alors d'effectuer la comparaison en gérant la casse. Voilà un exemple d'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Commande4_Click()
        If transforme_chaine(Me.Login) <> transforme_chaine(Me.MotdePAsse) Then
            MsgBox "chaine différente"
        Else
            MsgBox "chaine identique"
        End If
     
    End Sub
    PS. A noter que cette fonction est également utilisable dans les requêtes si nécessaire

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Bonjour à tous,

    jimbolion, je vous présente ma base en pièce jointe car j'ai des erreurs dans l’exécution des codes

    Merci pour votre réponse
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Kave bonjour,

    Pour commencer mon code suivait la logique développé dans ta question à savoir contrôler un mot de passe avec un identifiant (login) ce qui aurait été une grosse erreur. Il faut donc comparer le mot de passe de l'utilisateur renseigné (dans la table tbUsers) et celui renseigné sur le formulaire d'identification.

    Ce copier coller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If transforme_chaine(Me.Login) <> transforme_chaine(Me.txtPassword) Then
    est donc une une aberration.

    donc les étapes sont :

    1. Vérifier la présence d'un identifiant
    2. Récupérer le mot de passe dans la table
    3. Comparer les deux mots de passe avec gestion de la casse (ainsi password <> Password)

    La récupération d'un mot de passe dans la table avec le filtre identifiant s'opère par l'utilisation des fonctions de domaines grâce à Dlookup : http://starec.developpez.com/tuto/fonctionsdomaines/

    Le code fourni sur clic de ton bouton devient :

    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
    Private Sub Commande7_Click()
        Dim Password As String
        '
        ' On vérifie la saisie d'un login
        '
        If Nz(Me.LOGIN, "") = "" Then
            MsgBox "Vous devez saisir un login !"
            Exit Sub
        End If
        '
        ' Récupère le mot de Passe grâce à une fonction de domaine
        '
        Password = Nz(DLookup("[MOT DE PASSE]", "tblUser", "LOGIN='" & Me.LOGIN & "'"), "")
        '
        ' comparaison du mot de passe stocké dans tbuser avec celui du forms
        ' Uilisation de la fonction contrôle de la casse
        '
        If transforme_chaine(Password) <> transforme_chaine(Me.txtPassword) Then
                MsgBox "Mot de passe erroné"
            Else
                DoCmd.Close                     ' ferme le formulaire frmlogin
                DoCmd.OpenForm "frmMainMenu"    ' ouverture du formulaire menu
        End If
     
    End Sub
    Malgré tout quelques conseils sur ton projet :
    1. Eviter les espaces et accents dans le nom de tes champs dans les tables,
    2. donner des noms à tes contrôles (exemple bt_valider plutôt que cmmande7)

    Si la réponse donnée est conforme à tes attentes pense à mettre . Pour de nouvelles demandes pense à créer un nouveau fil de discussion.

    Cordialement

    jimbolion
    Fichiers attachés Fichiers attachés
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Bonjour jimbolion,

    je vous remercie pour votre aide et conseils, je vais en tenir compte

    Grand merci à tous les développeurs et à l'équipe de developpez.net

  6. #6
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    A tous,

    une autre solution pour ceux qui seraient amenés à lire ce fil de discussion est d'utiliser strcomp :

    https://msdn.microsoft.com/fr-fr/lib...(v=vs.90).aspx

    ainsi son utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function comparetext()
    Dim MyStr1, MyStr2, MyComp
    MyStr1 = "ABCD": MyStr2 = "abcd"    ' Définit les variables.
    result = StrComp(MyStr1, MyStr2, 1)    ' Renvoie 0.
     
    result = StrComp(MyStr1, MyStr2, 0)    ' Renvoie -1.
     
    result = StrComp(MyStr2, MyStr1)    ' Renvoie 1.
     
    End Function
    Cordialement
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Septembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Amateur
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2017
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Très utile pour moi
    Citation Envoyé par jimbolion Voir le message
    Kave bonjour,

    Pour commencer mon code suivait la logique développé dans ta question à savoir contrôler un mot de passe avec un identifiant (login) ce qui aurait été une grosse erreur. Il faut donc comparer le mot de passe de l'utilisateur renseigné (dans la table tbUsers) et celui renseigné sur le formulaire d'identification.

    Ce copier coller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If transforme_chaine(Me.Login) <> transforme_chaine(Me.txtPassword) Then
    est donc une une aberration.

    donc les étapes sont :

    1. Vérifier la présence d'un identifiant
    2. Récupérer le mot de passe dans la table
    3. Comparer les deux mots de passe avec gestion de la casse (ainsi password <> Password)

    La récupération d'un mot de passe dans la table avec le filtre identifiant s'opère par l'utilisation des fonctions de domaines grâce à Dlookup : http://starec.developpez.com/tuto/fonctionsdomaines/

    Le code fourni sur clic de ton bouton devient :

    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
    Private Sub Commande7_Click()
        Dim Password As String
        '
        ' On vérifie la saisie d'un login
        '
        If Nz(Me.LOGIN, "") = "" Then
            MsgBox "Vous devez saisir un login !"
            Exit Sub
        End If
        '
        ' Récupère le mot de Passe grâce à une fonction de domaine
        '
        Password = Nz(DLookup("[MOT DE PASSE]", "tblUser", "LOGIN='" & Me.LOGIN & "'"), "")
        '
        ' comparaison du mot de passe stocké dans tbuser avec celui du forms
        ' Uilisation de la fonction contrôle de la casse
        '
        If transforme_chaine(Password) <> transforme_chaine(Me.txtPassword) Then
                MsgBox "Mot de passe erroné"
            Else
                DoCmd.Close                     ' ferme le formulaire frmlogin
                DoCmd.OpenForm "frmMainMenu"    ' ouverture du formulaire menu
        End If
     
    End Sub
    Malgré tout quelques conseils sur ton projet :
    1. Eviter les espaces et accents dans le nom de tes champs dans les tables,
    2. donner des noms à tes contrôles (exemple bt_valider plutôt que cmmande7)

    Si la réponse donnée est conforme à tes attentes pense à mettre . Pour de nouvelles demandes pense à créer un nouveau fil de discussion.

    Cordialement

    jimbolion
    Cette fonction m'a sauvé. J'ai galéré pendant très longtemps et voilà, tu m'as donné la solution. Merci beaucoup et longue vie au club

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

Discussions similaires

  1. Inséré dans une table ACCESS sensible a la casse ?
    Par Luffy_San dans le forum Modélisation
    Réponses: 7
    Dernier message: 21/01/2008, 10h21
  2. ORDER BY sensible à la casse?
    Par soda_o_rat dans le forum Requêtes
    Réponses: 4
    Dernier message: 07/01/2007, 13h01
  3. Réponses: 2
    Dernier message: 15/05/2006, 14h08
  4. [Requête] SELECT sensible à la casse
    Par joefou dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/02/2006, 14h23
  5. Nom de la table sensible à la casse
    Par Alexandre T dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 17/03/2005, 17h34

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