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

IHM Discussion :

Accès à un formulaire [AC-2003]


Sujet :

IHM

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut Accès à un formulaire
    Bonjour,
    Sur un formulaire frm_main, j'ai un bouton de commande qui permet d'ouvrir un formulaire frm_access.
    Sur le frm_main, j'ai une zone de texte "User" avec comme source contrôle =Utilisateur()
    J'aimerais pouvoir bloquer l'accès au frm_access à certains users quand je le désire et leur redonner accès.
    Pour cela, j'ai crée une table tbl_access avec les champs suivants :
    User : texte
    Validation : Yes/No

    Sur mon bouton de commande, j'ai le code suivant mais il ne fonctionne 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Private Sub Commande74_Click()
    On Error GoTo Err_Commande74_Click
     
        Dim stDocName As String
        Dim stLinkCriteria As String
     
    If User = "TM14LD" Then
        If tbl_access.User = "TM14LD" And tbl_access.validation = True Then
            MsgBox "You don't have permission to open this window !", vbExclamation, "CTX"
            End If
            Else
        stDocName = "frm_access"
        DoCmd.OpenForm stDocName, , , stLinkCriteria
      End If
     
    Exit_Commande74_Click:
        Exit Sub
     
    Err_Commande74_Click:
        MsgBox Err.Description
        Resume Exit_Commande74_Click
     
    End Sub

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 136
    Points : 169
    Points
    169
    Par défaut
    Bonjour,

    Et... l'erreur vient de quelle ligne ?

    A vue de nez, je dirais la ligne 8 ; tbl_access est une table, dc tu ne peux pas l'atteindre comme ça.
    Apparemment, ta fontion "utilisateur()" te permet d'identifier l'utilisateur. A partir de là :
    - Requête sur tbl_access pour identifier les droits correspondants au nom de l'utilisateur (donc qqc comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rqsql = "Select Validation FROM tbl_access WHERE Utilisateur = " & User
    )
    - Exécution de la requête.
    - Test sur le résultat (si le résultat, dans le recordset, est True, ouverture, sinon, msgbox). Un peu comme ce que tu fais là !

    Cordialement,
    Beub'.

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut
    Oui l'erreur vient bien au départ de la ligne 8.
    Mais je ne sais vraiment pas comment m'y prendre pour incorporer le sql dans le code ...

  4. #4
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut
    J'ai un peu avancé

    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
    27
    28
    Private Sub Commande79_Click()
    On Error GoTo Err_Commande79_Click
     
    Dim db As DAO.Database
    Set db = CurrentDb()
    Dim reqSQL As String
    Dim nbRcds As Long
    Dim rcds As DAO.Recordset
     
    reqSQL = "Select Validation FROM tbl_access WHERE Utilisateur = User"
    Set rcds = db.OpenRecordset(reqSQL)
            If rcds.EOF Then
            nbRcds = 0
            Else
            rcds.MoveLast
            nbRcds = rcds.RecordCount
            End If
    Set db = Nothing
    Set rcds = Nothing
     
    Exit_Commande79_Click:
        Exit Sub
     
    Err_Commande79_Click:
        MsgBox Err.Description
        Resume Exit_Commande79_Click
     
    End Sub
    Suis-je sur la bonne voie ?
    J'aimerais aussi savoir comment mettre une condition sur le résultat de ce requête ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If ...
    Msgbox        
    Else
        stDocName = "frm_access"
        DoCmd.OpenForm stDocName, , , stLinkCriteria
    End If

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 136
    Points : 169
    Points
    169
    Par défaut
    Bonjour,

    Tu es effectivement sur la bonne voie ! Reste à identifier ensuite les tests exacts que tu souhaites effectuer..! A titre d'exemple :

    Est-il possible d'avoir plusieurs utilisateurs enregistrés sous le même nom dans cette table ? Par exemple :
    - User1 avec Validation = TRUE
    - User2 avec Validation = TRUE
    - User3 avec Validation = FALSE
    - User1 avec Validation = FALSE

    Dans ce cas, ta requête (sur User1) retournerait deux résultats => lequel devra être pris en compte ? True ou False ?

    De même, que se passe-t-il si aucun résultat n'est retourné par la requête ?

    Petit morceau de code (non testé mais je crois que je n'ai pas pris de risque..)

    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
    Set rcds = db.OpenRecordset(reqSQL)
     
        'On se place sur le premier enregistrement
        rcds.MoveFirst
        'Si plus d'un enregistrement, dans tbl_access, est retourné, on n'effectue pas le code
        If rcds.RecordCount = 1 Then
            'Test de la valeur de Validation
            If rcds![Validation] = True Then
                MsgBox "Droits d'accès OK"
            Else
                MsgBox "Accès refusé"
            End If
        End If
     
    Set db = Nothing
    Set rcds = Nothing
    Essaie de t'aider de ça. Et évite d'entrer "en dur" les paramètres de ta requête (notamment le "Utilisateur = 'User'").
    Pour tester le contenu de ton recordset : NomDuRecordset!["NomDuChamp"] !

    En espérant que ça t'aidera.

    Cordialement,
    Beub'

  6. #6
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut
    Citation Envoyé par Beub' Voir le message
    Bonjour,

    Tu es effectivement sur la bonne voie ! Reste à identifier ensuite les tests exacts que tu souhaites effectuer..! A titre d'exemple :

    Est-il possible d'avoir plusieurs utilisateurs enregistrés sous le même nom dans cette table ? Par exemple :
    - User1 avec Validation = TRUE
    - User2 avec Validation = TRUE
    - User3 avec Validation = FALSE
    - User1 avec Validation = FALSE

    Dans ce cas, ta requête (sur User1) retournerait deux résultats => lequel devra être pris en compte ? True ou False ?

    De même, que se passe-t-il si aucun résultat n'est retourné par la requête ?

    Petit morceau de code (non testé mais je crois que je n'ai pas pris de risque..)

    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
    Set rcds = db.OpenRecordset(reqSQL)
     
        'On se place sur le premier enregistrement
        rcds.MoveFirst
        'Si plus d'un enregistrement, dans tbl_access, est retourné, on n'effectue pas le code
        If rcds.RecordCount = 1 Then
            'Test de la valeur de Validation
            If rcds![Validation] = True Then
                MsgBox "Droits d'accès OK"
            Else
                MsgBox "Accès refusé"
            End If
        End If
     
    Set db = Nothing
    Set rcds = Nothing
    Essaie de t'aider de ça. Et évite d'entrer "en dur" les paramètres de ta requête (notamment le "Utilisateur = 'User'").
    Pour tester le contenu de ton recordset : NomDuRecordset!["NomDuChamp"] !

    En espérant que ça t'aidera.

    Cordialement,
    Beub'
    Bonjour Beub' et merci pour ta réponse.

    Non il n'est pas possible qu'il y ait plusieurs mêmes users.
    User (texte)------Validation(Oui/Non)
    Jean-------------True
    Marc-------------False
    Sébastien--------True
    etc etc

    J'ai essayé le code suivant mais lorsque je click sur le bouton de commande qui me permet d'ouvrir ou non le formulaire frm_access, il m'indique un message : "Trop peu de paramètre. 1 attendu".

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Private Sub Commande79_Click()
    On Error GoTo Err_Commande79_Click
     
    Dim db As DAO.Database
    Set db = CurrentDb()
    Dim reqSQL As String
    Dim nbRcds As Long
    Dim rcds As DAO.Recordset
     
    reqSQL = "Select Validation FROM tbl_access WHERE Utilisateur = User"
    Set rcds = db.OpenRecordset(reqSQL)
     
        rcds.MoveFirst
        If rcds.RecordCount = 1 Then
            If rcds![Validation] = True Then
                   DoCmd.OpenForm "frm_access"
            Else
                MsgBox "Accès refusé"
            End If
        End If
     
    Set db = Nothing
    Set rcds = Nothing
     
            If rcds.EOF Then
            nbRcds = 0
            Else
            rcds.MoveLast
            nbRcds = rcds.RecordCount
            End If
    Set db = Nothing
    Set rcds = Nothing
     
    Exit_Commande79_Click:
        Exit Sub
     
    Err_Commande79_Click:
        MsgBox Err.Description
        Resume Exit_Commande79_Click
     
    End Sub

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 136
    Points : 169
    Points
    169
    Par défaut
    Bonjour,

    Le problème vient de ta requête SQL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reqSQL = "Select Validation FROM tbl_access WHERE Utilisateur = User"
    User doit être placé entre simple quotes s'il s'agit d'une chaine de caractères.

    S'il s'agit d'une variable, elle doit être "sortie" de la chaine de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim User AS String
    User = "UtilisateurTest"
    reqSQL = "Select Validation FROM tbl_access WHERE Utilisateur = '" & User & "'"
    D'après ta requête, User n'est pas reconnu comme un paramètre (chaine de caractères "en dur" => simple quote ; variable => "sortie" de la chaine), le message t'indique donc qu'il en manque un.

    Je ne sais pas si je suis très clair mais, dans le pire des cas, go google pour la création de requêtes SQL en VBA Access

    Cordialement,
    Beub'.

  8. #8
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut
    Citation Envoyé par Beub' Voir le message
    Bonjour,

    Le problème vient de ta requête SQL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reqSQL = "Select Validation FROM tbl_access WHERE Utilisateur = User"
    User doit être placé entre simple quotes s'il s'agit d'une chaine de caractères.

    S'il s'agit d'une variable, elle doit être "sortie" de la chaine de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim User AS String
    User = "UtilisateurTest"
    reqSQL = "Select Validation FROM tbl_access WHERE Utilisateur = '" & User & "'"
    D'après ta requête, User n'est pas reconnu comme un paramètre (chaine de caractères "en dur" => simple quote ; variable => "sortie" de la chaine), le message t'indique donc qu'il en manque un.

    Je ne sais pas si je suis très clair mais, dans le pire des cas, go google pour la création de requêtes SQL en VBA Access

    Cordialement,
    Beub'.
    J'ai compris mais lorsque je lance le code suivant, il m'indique maintenant "Aucun enregistrement en cours" ...

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Private Sub Commande79_Click()
    On Error GoTo Err_Commande79_Click
     
    Dim db As DAO.Database
    Set db = CurrentDb()
    Dim reqSQL As String
    Dim nbRcds As Long
    Dim rcds As DAO.Recordset
    Dim User AS String
    User = "UtilisateurTest"
    reqSQL = "Select Validation FROM tbl_access WHERE Utilisateur = '" & User & "'"
    Set rcds = db.OpenRecordset(reqSQL)
     
        rcds.MoveFirst
        If rcds.RecordCount = 1 Then
            If rcds![Validation] = True Then
                   DoCmd.OpenForm "frm_access"
            Else
                MsgBox "Accès refusé"
            End If
        End If
     
    Set db = Nothing
    Set rcds = Nothing
     
            If rcds.EOF Then
            nbRcds = 0
            Else
            rcds.MoveLast
            nbRcds = rcds.RecordCount
            End If
    Set db = Nothing
    Set rcds = Nothing
     
    Exit_Commande79_Click:
        Exit Sub
     
    Err_Commande79_Click:
        MsgBox Err.Description
        Resume Exit_Commande79_Click
     
    End Sub

  9. #9
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut
    Enfin ca marche avec le code suivant mais j'ai un message :

    Variable objet ou variable de bloc With non définie

    Comment cela se fait ?

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Private Sub Commande79_Click()
    On Error GoTo Err_Commande79_Click
     
    Dim db As DAO.Database
    Set db = CurrentDb()
    Dim reqSQL As String
    Dim nbRcds As Long
    Dim rcds As DAO.Recordset
    Dim User As String
     
    reqSQL = "Select Validation FROM tbl_access WHERE Utilisateur='" & User & "'"
     
    Set rcds = db.OpenRecordset(reqSQL)
     
        rcds.MoveFirst
        If rcds.RecordCount = 1 Then
            If rcds![Validation] = True Then
                   DoCmd.OpenForm "frm_access"
            Else
                MsgBox "Accès refusé"
            End If
        End If
     
    Set db = Nothing
    Set rcds = Nothing
     
            If rcds.EOF Then
            nbRcds = 0
            Else
            rcds.MoveLast
            nbRcds = rcds.RecordCount
            End If
    Set db = Nothing
    Set rcds = Nothing
     
    Exit_Commande79_Click:
        Exit Sub
     
    Err_Commande79_Click:
        MsgBox Err.Description
        Resume Exit_Commande79_Click
     
    End Sub

  10. #10
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut
    Ca marche !!! J'ai juste supprimé les variables avec valeur nothing

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/06/2006, 20h50
  2. [VBA] acces sous-formulaire dépendant
    Par menguygw dans le forum Access
    Réponses: 2
    Dernier message: 03/05/2006, 15h46
  3. Pb d'accés aux formulaires
    Par calimero91 dans le forum Access
    Réponses: 3
    Dernier message: 28/04/2006, 13h38
  4. Gestion de l'accés aux formulaires
    Par Virgile59 dans le forum Access
    Réponses: 3
    Dernier message: 05/01/2006, 16h58
  5. Réponses: 1
    Dernier message: 08/09/2005, 14h16

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