Vous avez besoin de savoir qui, dans votre entreprise, a ajouté un enregistrement ? Ou qui l'a mis à jour en dernier ? C'est un besoin assez courant, mais malheureusement, Microsoft Access ne propose pas de fonctionnalité intégrée pour cela. Ajouter un champ « Dernière mise à jour par » à votre table peut (dans de nombreux cas) suffire, mais comment savoir qui a mis à jour l'enregistrement si Access ne peut pas vous le dire ? Un peu de code VBA est tout ce qu'il vous faut, comme vous le verrez dans cet article.
Pas besoin de créer votre propre formulaire de "connexion" pour capturer le nom d'utilisateur
À moins que votre base de données ne dispose de son propre formulaire ou mécanisme de connexion, la seule façon de savoir qui utilise / est actuellement connecté à la base de données est d'utiliser l'un des fichiers du système d'exploitation Windows, en particulier le "mpr.dll". déposer. Si vous n'avez jamais utilisé de dll externes dans votre code auparavant, cela peut sembler un peu intimidant, mais comme vous le verrez dans le code ci-dessous, c'est en fait assez simple.
Alors, définissons ce que nous voulons que notre code fasse…
"Laissez-moi avoir le nom de l'utilisateur actuellement connecté"
Tout d'abord, le code :
Declare Function GetUser Lib "mpr.dll" Alias "WNetGetUserA" (ByVal Name As String, ByVal UserName As String, Length As Long) As Long Public Function GetUserName() As String Dim returnStatus As Integer Dim Name, UserName As String 'Allocate space for user name to be stored in UserName = Space(255) ' Call the aliased function in the mpr.dll file. returnStatus = GetUser(Name, UserName, 255) If returnStatus = 0 Then 'Strip the username from the returned string UserName = Left(UserName, InStr(UserName, Chr(0)) - 1) Else ' An error occurred. GetUserName = "Error retrieving the user name." End End If GetUserName = UserName End Function
Le code expliqué
La première chose que vous verrez est que nous faisons référence à une fonction externe, contenue dans le fichier mpr.dll. Pour ce faire, nous déclarons un nom local (GetUser) pour la fonction publique contenue dans la dll (dans ce cas, WNetGetUserA). – nous définissons également les paramètres nécessaires à l'appel de la fonction – dans ce cas les paramètres « Name », « UserName » et « Length ». Le seul qui nous intéresse vraiment ici est "UserName" mais le reste doit également être fourni car c'est ainsi que la fonction est configurée dans la dll.
Maintenant que c'est fait, nous créons notre propre fonction, à partir de laquelle nous allons faire un appel à cette fonction externe. Le code de notre fonction est assez minimal, mais passons en revue les éléments clés :
- « UserName = Space(255) » – Si vous parcourez le code pas à pas dans le débogueur, vous constaterez que lorsque la fonction « GetUser() » est appelée, la variable « UserName » qui lui est passée est écrasée. Pour ce faire, la variable doit disposer de suffisamment de mémoire pour stocker les données ; nous lui allouons donc 255 espaces, ce qui devrait largement suffire pour la plupart (voire la totalité) des noms d’utilisateur.
- Nous capturons la valeur de retour de l'appel de fonction dans la variable « returnStatus ». Un zéro (0) ici signifie que l'appel a réussi, tout le reste signifie qu'une erreur s'est produite.
- Enfin, la variable "UserName" doit être rangée car elle sera essentiellement remplie de caractères nuls, nous extrayons donc les caractères qui se trouvent dans la variable avant qu'un Chr (0) ne soit trouvé.
Voir - maintenant ce n'était pas si mal que ça! Et maintenant, au moins si vous devez faire face à corruption de la base de données mdb, vous saurez qui a utilisé la base de données en dernier afin de savoir qui vous pouvez blâmer ! (je plaisante bien sûr !)
Introduction de l'auteur:
Mitchell Pond est un expert en récupération de données dans DataNumen, Inc., qui est le leader mondial des technologies de récupération de données, y compris réparation SQL Server problème et des produits logiciels de récupération Excel. Pour plus d'informations, visitez www.datanumen.com
