Kaip gauti šiuo metu duomenų bazę naudojančio asmens vartotojo vardą per VBA

Bendrinti dabar:

Reikia žinoti, kas jūsų įmonėje pridėjo konkretų įrašą? Arba kas jį paskutinį kartą atnaujino? Tai gana dažnas reikalavimas, tačiau, deja, „Microsoft Access“ neturi integruotų funkcijų šiam tikslui. Paprasčiausiai pridėjus lauką „paskutinį kartą atnaujino“ į lentelę (daugeliu atvejų) gali pakakti daugumai poreikių patenkinti, bet kaip žinoti, kas atnaujino įrašą, jei „Access“ negali to pasakyti? Kaip parodys šis straipsnis, jums tereikia šiek tiek VBA kodo.

Nereikia kurti savo prisijungimo formos, kad užfiksuotumėte vartotojo vardą

Ms Access duomenų bazėNebent jūsų duomenų bazėje yra atskira prisijungimo forma arba mechanizmas, vienintelis būdas sužinoti, kas šiuo metu naudojasi / prie jos prisijungia, yra naudoti vieną iš „Windows“ operacinės sistemos failų – konkrečiai „mpr.dll“. failą. Jei anksčiau savo kode nenaudojote išorinių dll, tai gali atrodyti šiek tiek bauginančiai, bet, kaip matysite toliau pateiktame kode, tai iš tikrųjų yra gana paprasta.

Taigi – apibrėžkime, ką norime, kad mūsų kodas darytų…

„Leiskite man sužinoti šiuo metu prisijungusio vartotojo vardą“

Pirma, kodas:

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

Kodas, paaiškino

Šiuo metu prisijungęs vartotojas

Pirmas dalykas, kurį pamatysite, yra tai, kad darome nuorodą į išorinę funkciją, esančią mpr.dll faile. Tai darome deklaruodami vietinį viešosios funkcijos, esančios dll, pavadinimą („GetUser“) (šiuo atveju WNetGetUserA). – taip pat apibrėžiame, kokie parametrai reikalingi funkcijos iškvietimui – šiuo atveju parametrai „Vardas“, „Vartotojo vardas“ ir „Ilgis“. Vienintelis, kuriuo mes tikrai domimės, yra „Vartotojo vardas“, bet likusi dalis taip pat turi būti pateikta, nes taip funkcija nustatoma dll.

Dabar tai padaryta, sukuriame savo funkciją, iš kurios iškviesime šią išorinę funkciją. Mūsų funkcijos kodas yra gana minimalus, bet panagrinėkime pagrindinius elementus:

  1.  „UserName = Space(255)“ – jei peržiūrėsite kodą derinimo priemonėje, pamatysite, kad iškvietus funkciją „GetUser()“, jai perduodamas kintamasis „UserName“ yra perrašomas. Kad tai įvyktų, kintamajam reikia skirti pakankamai atminties duomenims saugoti, todėl kintamajam skiriame tik 255 tarpo simbolius, nes to turėtų pakakti daugumai (jei ne visiems) vartotojų vardams.
  2. Grąžinamąją reikšmę iš funkcijos iškvietimo fiksuojame kintamajame „returnStatus“. Nulis (0) reiškia, kad skambutis buvo sėkmingas, o visa kita reiškia, kad įvyko klaida.
  3.  Galiausiai, kintamąjį „UserName“ reikia sutvarkyti, nes jis iš esmės bus užpildytas nuliniais simboliais, todėl išgausime kintamajame esančius simbolius prieš randant Chr(0).

Žiūrėk – dabar tai nebuvo taip blogai! Ir dabar, bent jau jei turite susidoroti mdb duomenų bazės sugadinimas, jūs žinosite, kas paskutinį kartą naudojosi duomenų baze, todėl ką galite kaltinti! (Žinoma, aš čia juokauju!)

Autoriaus įvadas:

Mitchell Pond yra duomenų atkūrimo ekspertas DataNumen, Inc., kuri yra pasaulyje duomenų atkūrimo technologijų lyderė, įskaitant remontas SQL Server problema ir Excel atkūrimo programinės įrangos produktai. Norėdami gauti daugiau informacijos, apsilankykite WWW.datanumen.com

Bendrinti dabar:

Komentarai yra uždaryti.