FAQ MS-Access
FAQ MS-AccessConsultez toutes les FAQ
Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 15 juin 2021
- Comment connaître le nom de l'utilisateur connecté ?
- Comment connaître le nom de l'utilisateur courant ?
- Comment obtenir le nom de l'utilisateur de Windows ?
- Comment utiliser une variable Type utilisateur ?
- Comment savoir si la personne connectée est administrateur ou non ?
- Comment récupérer le nom d'un utilisateur Novel ?
- Comment permettre à l'utilisateur de changer son mot de passe ?
La propriété CurrentUser de l'objet Access.Application retourne le nom de l'utilisateur de la base de données.
Exemple :
Msgbox
Application.CurrentUser
Lien : Comment gérer la sécurité - niveau utilisateur ?
Lien : Comment connaître le nom de l'utilisateur courant ?
Lien : Comment récupérer le nom d'un utilisateur Novel ?
Private
Declare
Function
apiGetUserName Lib
"advapi32.dll"
Alias _
"GetUserNameA"
(
ByVal
lpBuffer As
String
, nSize As
Long
) As
Long
Function
fOSUserName
(
) As
String
' Retourne le nom d'usager fourni lors du branchement au réseau.
Dim
lngLen As
Long
, lngX As
Long
Dim
strUserName As
String
strUserName =
String
$(
254
, 0
)
lngLen =
255
lngX =
apiGetUserName
(
strUserName, lngLen)
If
lngX <>
0
Then
fOSUserName =
left
$(
strUserName, lngLen -
1
)
Else
fOSUserName =
""
End
If
End
Function
Lien : Comment obtenir le nom de l'utilisateur de Windows ?
Lien : Comment connaître le nom de l'utilisateur connecté ?
Lien : Comment récupérer le nom d'un utilisateur Novel ?
Environ
(
"UserName"
)
Lien : Comment connaître le nom de l'utilisateur courant ?
Lien : Comment récupérer le nom d'un utilisateur Novel ?
On définit le type :
Type
Patient
dtmdrc As
Date
' Date création
strIPP As
String
' Numéro d'IPP
strNom As
String
' Nom
strNjf As
String
' Nom de jeune fille
strPre As
String
' Prénom
dtmDdn As
Date
' Date de naissance
strGro As
String
' Groupe sanguin
strRhe As
String
' Rhésus
strAdr As
String
' Adresse
strCpo As
String
' Code postal
strVil As
String
' Ville
strTel As
String
' Téléphone
lngCjt As
Long
' Numéro de conjoint attaché à la fiche administrative
End
Type
Dans le code on déclare la variable :
Dim
udtPatient As
Patient
et on utilise :
udtPatient.dtmdrc
=
#12
/
10
/
1968
#
udtPatient.strIPP
=
"021584"
udtPatient.strNom
=
"LA GAFFE"
udtPatient.strNjf
=
""
udtPatient.strPre
=
"Gaston"
Pour faire ça il faut faire appel au groupe Administrateur en tant que groupe d'appartenance de l'utilisateur par :
DBEngine.Workspaces
(
0
).Users
(
strUser).Groups
(
"admins"
).Name
Si pas d'erreur l'utilisateur appartient au groupe administrateur. Si Err.Number = 3265 élément non trouvé dans cette collection, l'utilisateur n'est pas administrateur.
Exemple :
Dim
esp As
Workspace
Dim
strUser As
String
On
Error
Resume
Next
strUser =
Application.CurrentUser
Set
esp =
DBEngine.Workspaces
(
0
)
' L'instruction suivante provoque ou non une erreur
strUser =
esp.Users
(
strUser).Groups
(
"admins"
).Name
If
Err
.Number
=
3265
Then
' Élément non trouvé dans cette collection, l'utilisateur n'est pas administrateur
ElseIf
Err
.Number
>
0
Then
' Autre erreur
ElseIf
Err
.Number
=
0
Then
' L'utilisateur appartient au groupe 'administrateur'
End
If
Normalement, un UserName sous Novell est loggé avec son nom de Login Windows. Il faut donc utiliser l'API GetUserName :
Private
Declare
Function
GetUserName Lib
"advapi32.dll"
Alias "GetUserNameA"
(
ByVal
lpBuffer As
String
, nSize As
Long
) As
Long
Private
Function
fGetUserName
(
) As
String
Dim
strUserName As
String
strUserName =
String
(
100
, vbNullChar
)
GetUserName strUserName, 100
strUserName =
Left
$(
strUserName, InStr
(
strUserName, vbNullChar
) -
1
)
fGetUserName =
strUserName
End
Function
Utilisez le code VBA suivant :
With
DBEngine.Workspaces
(
0
)
.Users
(
.UserName
).NewPassword
"ancienmotdepasse"
, "nouveaumotdepasse"
End
With
Voici un exemple complet d'utilisation dans un formulaire :
- quatre zones de texte indépendantes : une pour récupérer l'utilisateur courant, une pour l'ancien mot de passe et deux pour le nouveau mot de passe (choix + confirmation) ;
- deux boutons : Valider et Annuler.
Private
Sub
CmdAnnuler_Click
(
)
On
Error
GoTo
err
DoCmd.Close
err
:
Select
Case
err
Case
0
Case
Else
MsgBox
err
.Description
&
vbLf
&
err
.Source
End
Select
End
Sub
Private
Sub
CmdValider_Click
(
)
On
Error
GoTo
err
If
Me.OldPwd
=
Me.NewPwd
Then
MsgBox
"Le nouveau mot de passe est identique à l'ancien."
&
vbLf
&
_
"Veuillez choisir un autre mot de passe."
, vbOKOnly
+
vbExclamation
, "Nouveau mot de passe invalide"
Me.NewPwd
=
""
Me.ConfNewPwd
=
""
DoCmd.GoToControl
Me.NewPwd
Else
If
Me.NewPwd
<>
Me.ConfNewPwd
Then
MsgBox
"Le mot de passe entré en confirmation"
&
vbLf
&
_
"ne correspond pas au nouveau mot de passe."
, vbOKOnly
+
vbExclamation
, "Erreur de confirmation"
Me.NewPwd
=
""
Me.ConfNewPwd
=
""
DoCmd.GoToControl
Me.NewPwd
Else
With
DBEngine.Workspaces
(
0
)
.Users
(
.UserName
).NewPassword
Me.OldPwd
, Me.NewPwd
End
With
MsgBox
"Le mot de passe a été changé."
, vbOKOnly
+
vbInformation
, "Confirmation"
DoCmd.Close
End
If
End
If
err
:
Select
Case
err
Case
3033
MsgBox
"L'ancien mot de passe saisi n'est pas valide."
, vbOKOnly
+
vbExclamation
, "Ancien mot de passe incorrect"
Me.OldPwd
=
""
Me.NewPwd
=
""
Me.ConfNewPwd
=
""
DoCmd.GoToControl
(
"OldPwd"
)
Case
0
Case
Else
MsgBox
err
.Description
&
vbLf
&
err
.Source
End
Select
End
Sub
Private
Sub
Form_Load
(
)
On
Error
GoTo
err
Me.UtilCourant
=
"Utilisateur courant : "
&
DBEngine.Workspaces
(
0
).UserName
err
:
Select
Case
err
Case
0
Case
Else
MsgBox
err
.Description
&
vbLf
&
err
.Source
End
Select
End
Sub
Voici ce que cela donne :