[Access] formulaire login!!

Salut a tous, je suis entrain de faire une basse de données en access et j'aimerai inclure un formulaire qui ferait office de logon...........donc j'ai crée un formulaire et placé deux zones de texte (et un bouton connecter)......une pour le username et une autre pour le password.......mais apres je ne sais pas quoi faire... ..pour dire d'aller verifier les 2entrées vers la table des utilisateurs (la plusieurs champ on été crée, username et password forcement mais aussi , nom , prénom, bureau , etc)......cette table na aucun lien avec le reste des autres tables puisque je l'ai crée juste pour la phase de login........doit-je utilisé du code VB, une macro, du code d'access...............je c'est vraiment pas!!!

Si vous pouviez m'aider, ca serait vraiment sympa
Je vous remerci pour vos futur réponses.

bien à vous
Xtofer

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Salut,

    supposons que tu aies deux zones de texte : Z_User, Z_Pass qui sont là pour récupérer la saisie des infos, et que tu as une table User qui contient les user et mots de passe associés, ça pourrait ressembler à ça (code à mettre sur un bouton qui s'appelerait 'valider, propriété 'sur clic'') :
    Dim Rs As Recordset
    Dim Reconnu as Boolean
    Reconnu = False
    Set Rs = CurrentDb.OpenRecordset("User")
    Do While Not Rs.EOF
        If Rs.Fields("User").Value = Z_User.value Then
            If Rs.Fields("Pass").Value = Z_Pass.Value
                MsgBox "Ok"
                Reconnu = True
                Exit Do
            Else
                Msgbox "Erreur de mot de passe"
                GoTo Fin
            End If
        End If
        Rs.MoveNext
    Loop
    If Reconnu = False Then
        MsgBox "Utilisateur non reconnu !!!", vbCritical, "Attention.."
        GoTo Fin
    End If
    'Traitement suivants
    Fin:
    1. Contributeur
      Salut,
      Ben sur ton formulaire tu fais un bouton "login" et avec du code VBA derrière tu cherches le login dans la base, tu encodes le mot de passe, et tu vérifies que c'est la valeur attendue...
      1. A mon avis la avec ca je m'en rapproche.......seulement, il y a apparement une erreur lors de la compilation:

        Erreur d'execution '13'
        Incompatibilité de type

        Je pense pourtant avoir bien retransposé le nom de la table et du formulaire; mes 2 zones de textes s'appelent:
        "Z_User"
        "Z_Pass"
        Ma table se nomme : "Table Utilisateur" et comporte les champ "Username" et "Password"
        Mon formulaire s'appelent quand a lui : "Formulaire Logon"

        Private Sub Connecter_Click()
        Dim Rs As Recordset
        Dim Reconnu As Boolean
        Reconnu = False
        Set Rs = CurrentDb.OpenRecordset("Table Utilisateur")
        Do While Not Rs.EOF
        If Rs.Fields("Username").Value = Z_User.Value Then
        If Rs.Fields("Password").Value = Z_Pass.Value Then
        MsgBox "Ok"
        Reconnu = True
        Exit Do
        Else
        MsgBox "Erreur de mot de passe"
        GoTo Fin
        End If
        End If
        Rs.MoveNext
        Loop
        If Reconnu = False Then
        MsgBox "Utilisateur non reconnu !!!", vbCritical, "Attention.."
        GoTo Fin
        End If
        'Traitement suivants
        Fin:
        End Sub

        Ou est le probleme???
        Encore merci pour ta réponse
        1. A noter qu'il me surligne en jaune cette instruction lors du débogage:

          Set Rs = CurrentDb.OpenRecordset("Table Utilisateur")
        2. Modérateur
          Supprime la définition du type recorset pour rs...

          Mets Dim rs (ça le forcera en type variant).

          Ou regarde s'il ne manque pas une référence à DAO dans le menu outils/réference lors de la compilation.
        3. C'est assez bizar...........Dans Outils/références; Microsoft D.A.O 3.6 Object Library n'était pas coché..........c'est maintenant fait........mais ca foire toujours!..........j'ai essayé de retiré le recordset :
          Set Rs = CurrentDb.Open("Table Utilisateur")

          en mettant également dim rs en var:
          Dim Rs As Variant

          Mais la , il me met :
          Erreur de compilation, Membres de méthode ou de données introuvable
          Puis il me souligne en jaune : Private Sub Connecter_Click()
          et prend en selection (bleu) le Open de : Set Rs = CurrentDb.Open("Table Utilisateur")

          Bizar, de chez bizar...........je c meme pas ou cherché en plus
      2. bhé le bouton est crée, c'est justement le code a placé derriere que je ne connais pas...........j'aurai du précisé que je suis débutant dans access Et dans la programmation!!! pleazzzz heeeelp!!!!
        1. Nikel!!!!! ca marche! enfin, ca fonctionne!!..........fallait gardé le recordset pour rs met le metre en variant..........ca a l'air encore plus bizar mais pas grave du moment que ca tourne..............Ca sert a quoi D.A.O ???.................Encore gros merci pour tous!!!!
          Je dois y allé sinan je vais raté mon train
          thx a lot
          ++
          Xtofer
          1. En faite ton premier code était tres bon il manquait juste DAO devant le recordset de cette instruction :

            Dim Rs As DAO.Recordset

            sinan ca marche tres bien..............merci a toi blux

            Xtofer
            1. Modérateur
              Ben voui, mais comme je ne sais jamais à l'avance si DAO est installé sur une machine (et en quelle version), je fais mettre en variant, comme ça, plus d'erreur de type, si ça marche, on investigue vers DAO et toute la clique...

              Ravi de t'avoir aidé...
          2. Bonjour

            j'ai utlisé votre code pour créer un formulaire logon. Mais il m'indique qu'il manque un Do à la loop. J'ai pourtant repris votre code exacte :

            Private Sub Entrerr_Click()

            Dim Rs As DAO.Recordset
            Dim Reconnu As Boolean
            Reconnu = False
            Set Rs = CurrentDb.OpenRecordset("PRO SMAEC")
            Do While Not Rs.EOF
            If Rs.Fields("NOM UTILISATEUR").Value = Modifiable4.Value Then
            If Rs.Fields("CODE ACCES").Value = CODE_ACCES.Value Then
            MsgBox "Ok"
            Reconnu = True
            Exit Do
            Else
            MsgBox "Erreur de mot de passe"
            GoTo Fin
            End If
            Rs.MoveNext
            Loop
            If Reconnu = False Then
            MsgBox "Utilisateur non reconnu !!!", vbCritical, "Attention..."
            GoTo Fin
            End If
            Dim stDocName As String
            Dim stLinkCriteria As String

            stDocName = "Menu Général "
            DoCmd.OpenForm stDocName, , , stLinkCriteria

            Exit_Entrerr_Click:
            Exit Sub

            Err_Entrerr_Click:
            MsgBox Err.Description
            Resume Exit_Entrerr_Click

            Fin:

            End Sub

            Où est mon erreur ?

            Merci de votre aide
            1. Bonjour

              j'ai lu votre post sur le forum, et j'ai le même problème "boucle sans do"
              avez vous trouvé la solution?
            2. Modérateur
              @scarpeje viens de jeter un œil, il y a deux IF dans la boucle mais un seul END IF, donc ça coince...
            3. @bluxMerci pour ton aide

              j'ai trouvé ce code sur le forum qui fonctionne bien :

              Private Sub Commande6_Click()

              Me.Requery

              Dim sql As String
              Dim rs As DAO.Recordset

              Static i As Byte

              sql = "SELECT matable.user,matable.password FROM matable WHERE matable.user = '" & Me.txtuser & "' AND matable.password ='" & Me.txtpassword & "';"

              Set rs = CurrentDb.OpenRecordset(sql)

              If Not rs.EOF Then

              DoCmd.OpenForm "Menu ", acNormal, , , , acWindowNormal

              DoCmd.Close acForm, "identification "

              Else

              MsgBox "(Identifiant, Mot de Passe) incorrect ", vbInformation, "Connexion"

              i = i + 1

              End If

              If i = 3 Then
              MsgBox "Vous avez dépassé le nombre de tentatives autorisés", vbCritical
              DoCmd.Quit
              End If
              End Sub