Come ottenere il nome utente della persona che attualmente utilizza il database tramite VBA

Condividi ora:

Devi sapere chi nella tua azienda ha aggiunto un determinato record? O chi lo ha aggiornato per ultimo? È un'esigenza piuttosto comune, ma purtroppo Microsoft Access non offre una funzionalità integrata per questo. Aggiungere semplicemente un campo "Ultimo aggiornamento di" alla tabella può (in molti casi) essere sufficiente a soddisfare la maggior parte delle esigenze, ma come fai a sapere chi ha aggiornato il record se Access non te lo può dire? Basta un po' di codice VBA, come ti mostrerà questo articolo.

Non è necessario creare il proprio modulo di "accesso" per acquisire il nome utente

Database della signora AccessA meno che il tuo database non abbia il proprio modulo o meccanismo di accesso, l'unico modo per sapere chi sta attualmente utilizzando/ha effettuato l'accesso al database è utilizzare uno dei file del sistema operativo Windows, in particolare "mpr.dll" file. Se non hai mai usato DLL esterne nel tuo codice, può sembrare un po' scoraggiante, ma come vedrai nel codice qui sotto, in realtà è piuttosto semplice.

Quindi, definiamo cosa vogliamo che faccia il nostro codice...

"Fammi avere il nome dell'utente attualmente connesso"

Innanzitutto il codice:

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

Il codice, spiegato

L'utente attualmente connesso

La prima cosa che vedrai è che stiamo facendo riferimento a una funzione esterna, contenuta nel file mpr.dll. Lo facciamo dichiarando un nome locale (GetUser) per la funzione pubblica contenuta nella dll (in questo caso, WNetGetUserA). – definiamo anche quali parametri sono necessari per la chiamata di funzione – in questo caso i parametri “Name”, “UserName” e “Length”. L'unico a cui siamo veramente interessati qui è "UserName", ma anche il resto deve essere fornito poiché è così che la funzione è impostata all'interno della dll.

Ora che è stato fatto, creiamo la nostra funzione, dalla quale effettueremo una chiamata a questa funzione esterna. Il codice per la nostra funzione è piuttosto minimale, ma esaminiamo gli elementi chiave:

  1.  “UserName = Space(255)” – se si esegue il codice passo passo nel debugger, si noterà che quando viene chiamata la funzione “GetUser()”, la variabile “UserName” che le passiamo viene effettivamente sovrascritta. Affinché ciò accada, la variabile necessita di memoria sufficiente per memorizzare i dati, quindi le assegniamo semplicemente 255 caratteri spazio, poiché dovrebbero essere più che sufficienti per la maggior parte (se non tutti) i nomi utente.
  2. Catturiamo il valore restituito dalla chiamata di funzione nella variabile "returnStatus". Uno zero (0) qui significa che la chiamata ha avuto successo, qualsiasi altra cosa significa che si è verificato un errore.
  3.  Infine, la variabile "UserName" deve essere riordinata poiché sarà essenzialmente riempita con caratteri nulli, quindi estraiamo i caratteri che si trovano nella variabile prima che venga trovato un Chr (0).

Vedi – ora non era poi così male! E ora, almeno se hai a che fare con danneggiamento del database mdb, saprai chi ha utilizzato il database per ultimo, quindi chi puoi incolpare! (Sto scherzando ovviamente!)

Introduzione dell'autore:

Mitchell Pond è un esperto di recupero dati in DataNumen, Inc., che è il leader mondiale nelle tecnologie di recupero dati, tra cui riparazione SQL Server problema ed eccellere prodotti software di recupero. Per maggiori informazioni visita www.datanumen.com

Condividi ora:

I commenti sono chiusi.