Tietokantaa VBA: n kautta käyttävän henkilön käyttäjänimen saaminen

Haluatko tietää, kuka yrityksessäsi lisäsi tietyn tietueen? Tai kuka päivitti sitä viimeksi? Se on melko yleinen vaatimus, mutta valitettavasti Microsoft Accessissa ei ole sisäänrakennettua toimintoa tähän tarkoitukseen. Pelkkä "Viimeksi päivittänyt" -kentän lisääminen taulukkoon voi (monissa tapauksissa) riittää useimpiin tarpeisiin, mutta miten tiedät, kuka päivitti tietueen, jos Access ei pysty kertomaan sitä? Tarvitset vain hieman VBA-koodia, kuten tässä artikkelissa näytetään.

Käyttäjänimen kaappaamiseksi ei tarvitse luoda omaa kirjautumislomaketta

Ms Access -tietokantaEllei tietokannassasi ole omaa kirjautumislomaketta tai mekanismia, ainoa tapa, jolla tiedät, kuka tällä hetkellä käyttää / kirjautuneena tietokantaan, on käyttää yhtä Windows-käyttöjärjestelmätiedostoista - erityisesti "mpr.dll" tiedosto. Jos et ole käyttänyt ulkoisia dll-tiedostoja aiemmin koodissasi, se voi tuntua hieman pelottavalta, mutta kuten alla olevasta koodista näet, se on oikeastaan ​​melko suoraviivaista.

Joten - määritellään mitä haluamme koodimme tekevän…

"Haluan saada kirjautuneen käyttäjän nimen."

Ensinnäkin koodi:

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

Koodi, selitetty

Tällä hetkellä kirjautunut käyttäjä

Ensimmäinen asia, jonka näet, on, että viittaamme ulkoiseen toimintoon, joka sisältyy mpr.dll-tiedostoon. Teemme tämän ilmoittamalla paikallisen nimen (GetUser) dll: n julkiselle toiminnolle (tässä tapauksessa WNetGetUserA). - Määritämme myös parametrit, jotka ovat tarpeen funktiokutsulle - tässä tapauksessa parametrit “Name”, “UserName” ja “Length”. Ainoa, josta olemme todella kiinnostuneita, on "UserName", mutta myös loput on toimitettava, koska toiminto on asetettu dll: ssä.

Nyt, kun se on tehty, luomme oman toiminnon, josta soitamme tälle ulkoiselle toiminnolle. Toimintomme koodi on melko vähäinen, mutta käydään läpi tärkeimmät elementit:

  1.  ”Käyttäjänimi = Välilyönti(255)” – jos käyt koodin läpi debuggerissa, huomaat, että kun ”GetUser()”-funktiota kutsutaan, sille välittämämme ”Käyttäjänimi”-muuttuja itse asiassa korvataan. Jotta tämä tapahtuisi, muuttujalle on varattava riittävästi muistia datan tallentamista varten, joten varaamme muuttujalle vain 255 välilyöntimerkkiä, koska sen pitäisi riittää useimpien (ellei kaikkien) käyttäjätunnusten tallentamiseen.
  2. Sieppaamme funktiokutsun palautusarvon ”returnStatus” -muuttujaan. Nolla (0) tarkoittaa tässä puhelun onnistumista, mikä tahansa muu tarkoittaa, että on tapahtunut virhe.
  3.  Lopuksi "UserName" -muuttuja on siistitettävä, koska se on olennaisesti pehmustettu nollan merkeillä, joten erotamme muuttujassa olevat merkit ennen kuin Chr (0) löydetään.

Katso - nyt se ei ollut niin paha, se oli! Ja nyt, ainakin jos sinun on käsiteltävä mdb-tietokannan vioittuminen, tiedät kuka käytti tietokantaa viimeksi, joten kuka voit syyttää! (Vitsin tietysti täällä!)

Tekijän esittely:

Mitchell Pond on tietojen palauttamisen asiantuntija DataNumen, Inc., joka on maailman johtava tietojen palautustekniikoissa, mukaan lukien korjaus SQL Server ongelma ja Excel-palautusohjelmistotuotteet. Lisätietoja osoitteessa www.datanumen.com

Kommenttien lisääminen on estetty.