Cómo obtener el nombre de usuario de la persona que usa actualmente la base de datos a través de VBA

Comparte ahora:

¿Necesitas saber quién agregó un registro en tu empresa? ¿O quién lo actualizó por última vez? Es una necesidad bastante común, pero lamentablemente Microsoft Access no ofrece esta funcionalidad de forma nativa. En muchos casos, agregar un campo de "última actualización" a tu tabla puede ser suficiente para la mayoría de las necesidades, pero ¿cómo saber quién actualizó el registro si Access no te lo indica? Un poco de código VBA es todo lo que necesitas, como te mostraremos en este artículo.

No es necesario crear su propio formulario de "inicio de sesión" para capturar el nombre de usuario

Base de datos de MS AccessA menos que su base de datos tenga su propio formulario o mecanismo de inicio de sesión, la única forma en que podrá saber quién está usando / conectado actualmente a la base de datos es usar uno de los archivos del sistema operativo Windows, específicamente el "mpr.dll" archivo. Si no ha usado archivos DLL externos en su código antes, puede parecer un poco abrumador, pero como verá en el código a continuación, en realidad es bastante sencillo.

Entonces, definamos lo que queremos que haga nuestro código ...

"Déjame tener el nombre del usuario que ha iniciado sesión actualmente"

Primero, el código:

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

El código, explicado

El usuario actualmente conectado

Lo primero que verá es que estamos haciendo una referencia a una función externa, contenida dentro del archivo mpr.dll. Hacemos esto declarando un nombre local (GetUser) para la función pública contenida en el dll (en este caso, WNetGetUserA). - también definimos qué parámetros son necesarios para la llamada de la función - en este caso los parámetros “Nombre”, “Nombre de usuario” y “Longitud”. El único que realmente nos interesa aquí es "UserName", pero el resto también debe proporcionarse, ya que así es como se configura la función dentro de la dll.

Ahora que se ha hecho, creamos nuestra propia función, desde la cual realizaremos una llamada a esta función externa. El código de nuestra función es bastante mínimo, pero repasemos los elementos clave:

  1.  “UserName = Space(255)” – si depuras el código paso a paso, verás que cuando se llama a la función “GetUser()”, la variable “UserName” que le pasamos se sobrescribe. Para que esto suceda, la variable necesita suficiente memoria asignada para almacenar los datos, así que simplemente le asignamos 255 espacios, lo cual debería ser más que suficiente para la mayoría (si no todos) los nombres de usuario.
  2. Capturamos el valor de retorno de la llamada a la función en la variable "returnStatus". Un cero (0) aquí significa que la llamada fue exitosa, cualquier otra cosa significa que ha ocurrido un error.
  3.  Finalmente, la variable "UserName" necesita arreglarse, ya que estará esencialmente rellenada con caracteres nulos, por lo que extraemos los caracteres que están en la variable antes de encontrar un Chr (0).

Mira, eso no fue tan malo, ¿verdad? Y ahora, al menos si tienes que lidiar con corrupción de la base de datos mdb, sabrá quién utilizó la base de datos por última vez, ¡así que a quién puede culpar! (¡Estoy bromeando aquí por supuesto!)

Introducción del autor:

Mitchell Pond es un experto en recuperación de datos en DataNumen, Inc., que es el líder mundial en tecnologías de recuperación de datos, incluyendo reparación SQL Server problema y productos de software de recuperación de Excel. Para más información visite www.datanumen.com

Comparte ahora:

Los comentarios están cerrados.