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 :

Fonction boolean avec requête [AC-2007]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Dessinateur industriel
    Inscrit en
    Décembre 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dessinateur industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2010
    Messages : 61
    Par défaut Fonction boolean avec requête
    Bonjour,

    Afin de créer mon système de gestion de droits sur mon application, j'essaie de réaliser une fonction exécutant une requête parametrée devant me retourner une valeur booléenne.

    Le but est d'aller lire dans la table [droit], pour y récupérer le champs mis en argument dans la fonction, à savoir le nom de l'action que je souhaite restreindre ou non.

    Je ne pense pas avoir de problème sur ma requête, en revanche, ce doit être la manière d'accèder à celle-ci qui doit être en cause.

    Voici le code que j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function Droit(NomDuDroit As String) As Boolean
     
    Dim req As String
    Dim m As DAO.Recordset
     
    Set m = CurrentDb.OpenRecordset("SELECT Droit." & NomDuDroit & " FROM Utilisateur LEFT JOIN Droit ON Utilisateur.UserID=Droit.IdUtilisateur WHERE Utilisateur.Login = '" & ActiveUserLogin & "';")
    'm.MoveLast
    req = m!NomDuDroit       'je pense déjà que cette syntaxe n'a pas valable mais je ne sais pas comment l'écrire autrement.
     
    End function
    Avec cet exemple, j'otiens le message d'erreur: erreur d'execution 3265 -> élément non trouvé dans cette collection.

    Si vous pouviez m'aider à me montrer ce qui cloche, je vous en serais reconnaissant.

    Mickaël

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur Pilotage
    Inscrit en
    Avril 2009
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Pilotage
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 405
    Par défaut
    Bonjour =)

    T'utilises une fonction , donc il doit avoir un résultat.
    Dans ton code , il doit avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Droit = True 
    soit 
    Droit = False
    Ensuite t'utilises un recordset.
    Pour obtenir le résultat d'un recordset , utilises
    ou
    Après , je n'ai pas très bien compris le but de cette fonction. Elle renvoie soit Vrai soit Faux selon si la colonne du "nomdudroit" existe dans la table droit ?

    Cdt

  3. #3
    Membre confirmé
    Homme Profil pro
    Dessinateur industriel
    Inscrit en
    Décembre 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dessinateur industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2010
    Messages : 61
    Par défaut
    Salut

    Effectivement, le resultat je ne l'ai pas remis car je n'arrive pas encore a faire fonctionner l'ensemble.

    Cela dit, je vais tester ce que tu me proposes déjà.
    Pour répondre à ta question. Je possède la table [Droit] suivante:

    IdDroit, IdUtilisateur, Rang, Service, entreprise, Acces_Admin, Admin_Modification_des_Droits, Acces_GPE,GPE_Creer_piece, etc

    En fait tout ce qui est en rouge ici correspondra à une fonction que je souhaite interdire ou non. Dans ma table il s'agit de champs Oui/Non.
    Je souhaite utiliser ma fonction de la manière suivante par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub cmdCreatePart click()
     
    if Droit(CreatePart) = true then
         call CreatePart
    else
         msgbox("Vous n'avez pas les droits requis")
         exit sub
    end if
     
    End sub
    Est-ce que ça te parait plus clair?


    Edit:

    Ta réponse à bien résolu mon problème qui se situait sur la manière dont je tentais de récupérer la valeur recherchée.
    Voici le code qui fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Function Droit(NomDuDroit As String) As Boolean
     
    Dim req As String
    Dim m As DAO.Recordset
     
    Set m = CurrentDb.OpenRecordset("SELECT Droit." & NomDuDroit & " FROM Utilisateur LEFT JOIN Droit ON Utilisateur.UserID=Droit.IdUtilisateur WHERE Utilisateur.Login = '" & ActiveUserLogin & "';")
    Droit = m.Fields(NomDuDroit)
     
    End Function
    Encore une fois merci !!!!

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur Pilotage
    Inscrit en
    Avril 2009
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Pilotage
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 405
    Par défaut
    Bonjour,

    Je comprends mieux maintenant , je te propose 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
    Public Function Droit(NomDuDroit As String) As Boolean
    Dim rst As DAO.Recordset
    Dim i As Integer
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM Utilisateur ")
    For i = 1 To rst.Fields.Count
    If rst.Fields(i).Name = NomDuDroit Then
    Droit = True
    Exit Function
    End If
    Next i
    Droit = False
    End Function
     
    Public Sub Test1065()
    MsgBox Droit("login")
    End Sub
    la fonction fait une boucle sur les entêtes de colonne de la recordset ( on s'en fout des enregistrements ).

    Cdt ,

    PS : Je suis COMPLETEMENT à coté de la plaque , je pensais que tu voulais savoir si un nom d'entête de colonne existe ...

  5. #5
    Membre confirmé
    Homme Profil pro
    Dessinateur industriel
    Inscrit en
    Décembre 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dessinateur industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2010
    Messages : 61
    Par défaut
    Re,

    Le bout de code me semble bien intéressant. Par contre je ne comprends pas l'intérêt de boucler sur tous les entêtes de colonnes. Peux-tu m'en expliquer la raison?

    De plus, je crois (si j'ai compris) que ce que tu as voulu faire, c'est d'intégrer la condition à la fonction de manière à ne pas avoir à la répéter systèmatiquement à chaque fois ou on fait un contrôle sur des droits. Mais je ne vois pas d'autre manière que de le tester quand même dans la procédure pour poursuivre l'exécution du code.

    Edit: Je viens de voir ton edit.
    Je vois maintenant pourquoi je ne comprenais pas

    En tous cas, je suis content si mes questions te sont également utiles

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

Discussions similaires

  1. Problème avec une fonction créant des requêtes
    Par scarabeous dans le forum Access
    Réponses: 11
    Dernier message: 16/07/2008, 14h10
  2. Réponses: 1
    Dernier message: 28/08/2007, 19h18
  3. pb fonction arrondi avec une requête
    Par lbailler dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 15/08/2007, 00h46
  4. Réponses: 3
    Dernier message: 15/02/2007, 09h54
  5. pb avec la fonction boolean sur eclipse
    Par mcay dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 31/05/2004, 09h37

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