Kuidas saada VBA kaudu praegu andmebaasi kasutava isiku kasutajanimi

Kas peate teadma, kes teie ettevõttes konkreetse kirje lisas? Või kes seda viimati värskendas? See on üsna tavaline nõue, kuid kahjuks pole Microsoft Accessis selleks funktsionaalsust. Enamiku vajaduste rahuldamiseks piisab (paljudel juhtudel) lihtsalt tabelisse välja „Viimati värskendas“ lisamisest, aga kuidas teada saada, kes kirjet värskendas, kui Access seda ei ütle? Nagu see artikkel näitab, on vaja vaid väikest VBA-koodi.

Kasutajanime jäädvustamiseks pole vaja luua oma sisselogimisvormi

Ms Accessi andmebaasKui teie andmebaasil pole oma sisselogimisvormi või -mehhanismi, saate teada, kes praegu andmebaasi kasutab/sisse logib, kasutada ühte Windowsi operatsioonisüsteemi faili – täpsemalt mpr.dll. faili. Kui te pole varem oma koodis väliseid dll-e kasutanud, võib see tunduda pisut hirmutav, kuid nagu allolevast koodist näete, on see tegelikult üsna lihtne.

Niisiis – määratleme, mida me tahame, et meie kood teeks…

"Andke mulle praegu sisse logitud kasutaja nimi"

Esiteks kood:

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

Kood, selgitatud

Hetkel sisse logitud kasutaja

Esimene asi, mida näete, on see, et me viitame välisele funktsioonile, mis sisaldub failis mpr.dll. Teeme seda, deklareerides dll-is sisalduva avaliku funktsiooni (antud juhul WNetGetUserA) kohaliku nime (GetUser). – määratleme ka, millised parameetrid on funktsioonikutse jaoks vajalikud – antud juhul parameetrid “Nimi”, “Kasutajanimi” ja “Pikkus”. Ainus, millest me siin tõeliselt huvitatud oleme, on "Kasutajanimi", kuid ka ülejäänud osa tuleb esitada, kuna nii on funktsioon dll-is seadistatud.

Nüüd, mis on tehtud, loome oma funktsiooni, millest helistame sellele välisele funktsioonile. Meie funktsiooni kood on üsna minimaalne, kuid vaatame läbi põhielemendid:

  1.  „KasutajaNimi = Tühikumärk(255)” – kui siluris koodi läbi vaadata, siis funktsiooni „GetUser()” kutsumisel kirjutatakse sellele edastatud muutuja „KasutajaNimi” üle. Selleks peab muutujale olema eraldatud piisavalt mälu andmete salvestamiseks, seega eraldame muutujale lihtsalt 255 tühikut, kuna sellest peaks piisama enamiku (kui mitte kõigi) kasutajanimede jaoks.
  2. Jäädvustame funktsioonikutsest saadava väärtuse muutujas “returnStatus”. Null (0) tähendab siin, et kõne oli edukas, kõik muu tähendab, et ilmnes tõrge.
  3.  Lõpuks vajab muutuja "UserName" korrastamist, kuna see on sisuliselt polsterdatud nullmärkidega, nii et me ekstraheerime muutujas olevad märgid enne Chr(0) leidmist.

Vaata – see polnudki nii hull! Ja nüüd, vähemalt kui peate tegelema mdb andmebaasi rikkumine, saate teada, kes andmebaasi viimati kasutas, nii et keda saate süüdistada! (Ma teen siin muidugi nalja!)

Autori sissejuhatus:

Mitchell Pond on andmete taastamise ekspert DataNumen, Inc., mis on maailmas juhtiv andmete taastamise tehnoloogiate, sealhulgas remont SQL Server probleem ja Exceli taastamise tarkvaratooted. Lisateabe saamiseks külastage www.datanumenCom

Kommentaarid on suletud.