วิธีรับชื่อผู้ใช้ของบุคคลที่กำลังใช้ฐานข้อมูลผ่าน VBA

แบ่งปันเลย:

ต้องการทราบว่าใครในธุรกิจของคุณเป็นผู้เพิ่มข้อมูลรายการใดรายการหนึ่ง หรือใครเป็นผู้แก้ไขข้อมูลนั้นครั้งล่าสุด? นี่เป็นความต้องการที่พบได้บ่อย แต่โชคดีที่ Microsoft Access ไม่มีฟังก์ชันนี้ในตัว การเพิ่มฟิลด์ "แก้ไขล่าสุดโดย" ลงในตารางของคุณอาจเพียงพอต่อความต้องการส่วนใหญ่ (ในหลายกรณี) แต่คุณจะรู้ได้อย่างไรว่าใครเป็นผู้แก้ไขข้อมูลหาก Access ไม่สามารถบอกคุณได้? บทความนี้จะแสดงให้คุณเห็นว่าเพียงแค่ใช้โค้ด VBA เล็กน้อยก็เพียงพอแล้ว

ไม่จำเป็นต้องสร้างแบบฟอร์ม "เข้าสู่ระบบ" ของคุณเองเพื่อบันทึกชื่อผู้ใช้

ฐานข้อมูล Ms Accessเว้นแต่ฐานข้อมูลของคุณจะมีรูปแบบหรือกลไกการเข้าสู่ระบบของตัวเองวิธีเดียวที่คุณจะสามารถรู้ได้ว่าใครกำลังใช้ / ล็อกอินเข้าสู่ฐานข้อมูลคือใช้ไฟล์ระบบปฏิบัติการ Windows ไฟล์ใดไฟล์หนึ่งโดยเฉพาะ“ mpr.dll” ไฟล์. หากคุณไม่เคยใช้ dll ภายนอกในโค้ดของคุณมาก่อนมันอาจดูน่ากลัวเล็กน้อย แต่อย่างที่คุณเห็นในโค้ดด้านล่างมันค่อนข้างตรงไปตรงมา

ดังนั้น - มากำหนดสิ่งที่เราต้องการให้โค้ดของเราทำ ...

“ ขอชื่อผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน”

ประการแรกรหัส:

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

รหัสอธิบาย

ผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน

สิ่งแรกที่คุณจะเห็นคือเราทำการอ้างอิงถึงฟังก์ชันภายนอกที่มีอยู่ในไฟล์ mpr.dll เราทำได้โดยการประกาศชื่อท้องถิ่น (GetUser) สำหรับฟังก์ชันสาธารณะที่มีอยู่ใน dll (ในอินสแตนซ์นี้คือ WNetGetUserA) - เรายังกำหนดพารามิเตอร์ที่จำเป็นสำหรับการเรียกใช้ฟังก์ชัน - ในกรณีนี้คือพารามิเตอร์ "Name", "UserName" และ "Length" สิ่งเดียวที่เราสนใจจริงๆคือ "UserName" แต่ส่วนที่เหลือจะต้องได้รับการจัดเตรียมไว้ด้วยเนื่องจากเป็นวิธีการตั้งค่าฟังก์ชันภายใน dll

เมื่อเสร็จแล้วเราก็สร้างฟังก์ชันของเราเองซึ่งเราจะเรียกใช้ฟังก์ชันภายนอกนี้ รหัสสำหรับฟังก์ชั่นของเราค่อนข้างน้อย แต่เรามาดูองค์ประกอบสำคัญ:

  1.  “UserName = Space(255)” – หากคุณลองไล่ดูโค้ดทีละขั้นตอนในดีบักเกอร์ คุณจะเห็นว่าเมื่อฟังก์ชัน “GetUser()” ถูกเรียก ตัวแปร “UserName” ที่เราส่งเข้าไปนั้นจะถูกเขียนทับ เพื่อให้เป็นเช่นนั้น ตัวแปรจำเป็นต้องมีหน่วยความจำที่เพียงพอสำหรับเก็บข้อมูล ดังนั้นเราจึงจัดสรรช่องว่าง 255 ตัวให้กับตัวแปร ซึ่งน่าจะเพียงพอสำหรับชื่อผู้ใช้ส่วนใหญ่ (หรือทั้งหมด)
  2. เราจับค่าส่งคืนจากการเรียกใช้ฟังก์ชันในตัวแปร "returnStatus" ศูนย์ (0) ในที่นี้หมายถึงการโทรสำเร็จสิ่งอื่นใดหมายถึงข้อผิดพลาดเกิดขึ้น
  3.  สุดท้ายตัวแปร“ UserName” จำเป็นต้องมีการจัดระเบียบเนื่องจากจะถูกเติมด้วยอักขระว่างเป็นหลักดังนั้นเราจึงแยกตัวอักษรที่อยู่ในตัวแปรก่อนที่จะพบ Chr (0)

ดู - ตอนนี้มันไม่ได้แย่ขนาดนั้น! และตอนนี้อย่างน้อยถ้าคุณต้องจัดการกับ ฐานข้อมูล mdb เสียหายคุณจะรู้ว่าใครใช้ฐานข้อมูลเป็นครั้งสุดท้ายคุณจึงสามารถตำหนิใครได้! (ฉันล้อเล่นที่นี่แน่นอน!)

บทนำผู้เขียน:

Mitchell Pond เป็นผู้เชี่ยวชาญด้านการกู้คืนข้อมูลใน DataNumen, Inc. ซึ่งเป็นผู้นำระดับโลกด้านเทคโนโลยีการกู้คืนข้อมูล ได้แก่ ซ่อมแซม SQL Server ปัญหา และผลิตภัณฑ์ซอฟต์แวร์กู้คืน excel ดูข้อมูลเพิ่มเติมได้ที่ wwwdatanumenด้วย.

แบ่งปันเลย:

ความเห็นถูกปิด