Cara Mendapatkan Nama Pengguna Orang Yang Sedang Menggunakan Pangkalan Data melalui VBA

Kongsi Sekarang:

Perlu tahu siapa dalam perniagaan anda yang menambah rekod tertentu? Atau siapa yang mengemas kininya terakhir? Ia merupakan keperluan yang agak biasa, tetapi malangnya bukan satu keperluan yang mempunyai fungsi terbina dalam Microsoft Access. Hanya menambah medan "terakhir dikemas kini oleh" pada jadual anda (dalam banyak kes) sudah cukup untuk memenuhi kebanyakan keperluan, tetapi bagaimana anda tahu siapa yang mengemas kini rekod jika Access tidak dapat memberitahu anda? Sedikit kod VBA sudah memadai, seperti yang akan ditunjukkan oleh artikel ini.

Tidak perlu membuat borang "log masuk" anda sendiri untuk menangkap nama pengguna

Pangkalan Data Akses MSKecuali pangkalan data anda mempunyai bentuk atau mekanisme log masuk sendiri, maka satu-satunya cara anda dapat mengetahui siapa yang saat ini menggunakan / log masuk ke pangkalan data adalah dengan menggunakan salah satu fail Sistem Operasi Windows - khususnya "mpr.dll" fail. Sekiranya anda tidak pernah menggunakan dll luaran dalam kod anda sebelum ini, ia mungkin agak menakutkan, tetapi seperti yang anda lihat dalam kod di bawah, ia sebenarnya agak lurus ke hadapan.

Oleh itu - mari kita tentukan apa yang kita mahu kod kita lakukan ...

"Biarkan saya mempunyai nama pengguna yang sedang masuk"

Pertama, kod:

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

Kodnya, dijelaskan

Pengguna Yang Sedang Log Masuk

Perkara pertama yang akan anda lihat ialah kita membuat rujukan ke fungsi luaran, yang terdapat dalam fail mpr.dll. Kami melakukan ini dengan menyatakan nama tempatan (GetUser) untuk fungsi awam yang terdapat dalam dll (dalam hal ini, WNetGetUserA). - kami juga menentukan parameter apa yang diperlukan untuk fungsi panggilan - dalam hal ini parameter "Nama", "Nama Pengguna", dan "Panjang". Satu-satunya yang sangat kita minati di sini adalah "UserName" tetapi selebihnya harus dibekalkan juga kerana itulah fungsi disiapkan dalam dll.

Sekarang ini telah selesai, kita membuat fungsi kita sendiri, dari mana kita akan membuat panggilan ke fungsi luaran ini. Kod untuk fungsi kita cukup minimum tetapi mari kita teliti elemen-elemen utama:

  1.  “UserName = Space(255)” – jika anda menyemak kod dalam penyahpepijat, apa yang akan anda lihat ialah apabila fungsi “GetUser()” dipanggil, pembolehubah “UserName” yang kita serahkan kepadanya sebenarnya akan ditulis ganti. Untuk itu berlaku, pembolehubah tersebut memerlukan memori yang mencukupi untuk data disimpan, jadi kita hanya memperuntukkan 255 aksara ruang kepada pembolehubah tersebut kerana itu sepatutnya lebih daripada cukup untuk kebanyakan (jika tidak semua) nama pengguna terkandung di dalamnya.
  2. Kami menangkap nilai kembali dari fungsi panggilan dalam pemboleh ubah "returnStatus". Nol (0) di sini bermaksud panggilan berjaya, yang lain bermaksud ralat telah berlaku.
  3.  Akhirnya, pemboleh ubah "UserName" perlu dirapikan kerana pada dasarnya akan dibalut dengan null chars sehingga kita mengekstrak chars yang ada dalam variabel sebelum Chr (0) dijumpai.

Lihat - sekarang yang tidak seburuk itu! Dan sekarang, sekurang-kurangnya jika anda harus berurusan rasuah pangkalan data mdb, anda akan tahu siapa yang menggunakan pangkalan data terakhir sehingga siapa yang boleh anda salahkan! (Sudah tentu saya bergurau di sini!)

Pengenalan Pengarang:

Mitchell Pond adalah pakar pemulihan data di DataNumen, Inc., yang merupakan pemimpin dunia dalam teknologi pemulihan data, termasuk pembaikan SQL Server masalah dan produk perisian pemulihan yang unggul. Untuk maklumat lebih lanjut, lawati www.datanumen.com

Kongsi Sekarang:

Ruangan komen telah ditutup.