Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/09/2011, 17h26   #1
Nouveau Membre du Club
 
Homme Mickaël
Dessinateur industriel
Inscription : décembre 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Localisation : France

Informations professionnelles :
Activité : Dessinateur industriel
Secteur : Industrie

Informations forums :
Inscription : décembre 2010
Messages : 61
Points : 31
Points : 31
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 :
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
Vhalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 17h34   #2
Membre confirmé
 
Avatar de lelensois16
 
Homme Romain M.
Étudiant
Inscription : avril 2009
Messages : 167
Détails du profil
Informations personnelles :
Nom : Homme Romain M.
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 167
Points : 204
Points : 204
Bonjour =)

T'utilises une fonction , donc il doit avoir un résultat.
Dans ton code , il doit avoir
Code :
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
lelensois16 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/09/2011, 17h43   #3
Nouveau Membre du Club
 
Homme Mickaël
Dessinateur industriel
Inscription : décembre 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Localisation : France

Informations professionnelles :
Activité : Dessinateur industriel
Secteur : Industrie

Informations forums :
Inscription : décembre 2010
Messages : 61
Points : 31
Points : 31
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 :
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 :
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 !!!!
Vhalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 18h04   #4
Membre confirmé
 
Avatar de lelensois16
 
Homme Romain M.
Étudiant
Inscription : avril 2009
Messages : 167
Détails du profil
Informations personnelles :
Nom : Homme Romain M.
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 167
Points : 204
Points : 204
Bonjour,

Je comprends mieux maintenant , je te propose ce code

Code :
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 ...
lelensois16 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 18h20   #5
Nouveau Membre du Club
 
Homme Mickaël
Dessinateur industriel
Inscription : décembre 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Localisation : France

Informations professionnelles :
Activité : Dessinateur industriel
Secteur : Industrie

Informations forums :
Inscription : décembre 2010
Messages : 61
Points : 31
Points : 31
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
Vhalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h31.


 
 
 
 
Partenaires

Hébergement Web