Cần biết ai trong doanh nghiệp của bạn đã thêm một bản ghi cụ thể? Hoặc ai đã cập nhật nó lần cuối? Đó là một yêu cầu khá phổ biến, nhưng thật không may, đó không phải là yêu cầu mà Microsoft Access tích hợp sẵn chức năng. Chỉ cần thêm trường “cập nhật lần cuối bởi” vào bảng của bạn có thể (trong nhiều trường hợp) là đủ để đáp ứng most nhưng làm thế nào để bạn biết ai đã cập nhật bản ghi nếu Access không thể cho bạn biết? Một chút mã VBA là tất cả những gì bạn cần, vì bài viết này sẽ chỉ cho bạn.
Không cần tạo biểu mẫu “đăng nhập” của riêng bạn để lấy tên người dùng
Trừ khi cơ sở dữ liệu của bạn có biểu mẫu hoặc cơ chế đăng nhập riêng, thì cách duy nhất để bạn có thể biết ai hiện đang sử dụng/đăng nhập vào cơ sở dữ liệu là sử dụng một trong các tệp Hệ điều hành Windows – cụ thể là “mpr.dll” tài liệu. Nếu bạn chưa từng sử dụng dll bên ngoài trong mã của mình trước đây, điều này có vẻ hơi khó khăn, nhưng như bạn sẽ thấy trong mã bên dưới, nó thực sự khá đơn giản.
Vì vậy - hãy xác định những gì chúng ta muốn mã của mình thực hiện…
“Hãy cho tôi biết tên của người dùng hiện đang đăng nhập”
Đầu tiên, mã:
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
Mã, giải thích
Điều đầu tiên bạn sẽ thấy là chúng ta đang tạo một tham chiếu đến một hàm bên ngoài, được chứa trong tệp mpr.dll. Chúng tôi thực hiện điều này bằng cách khai báo một tên cục bộ (GetUser) cho hàm công khai có trong dll (trong trường hợp này là WNetGetUserA). – chúng tôi cũng xác định tham số nào cần thiết cho lệnh gọi hàm – trong trường hợp này là tham số “Tên”, “Tên người dùng” và “Độ dài”. Điều duy nhất chúng tôi thực sự quan tâm ở đây là “Tên người dùng” nhưng phần còn lại cũng phải được cung cấp vì đó là cách chức năng được thiết lập trong dll.
Bây giờ điều đó đã được thực hiện, chúng tôi tạo chức năng của riêng mình, từ đó chúng tôi sẽ thực hiện cuộc gọi đến chức năng bên ngoài này. Mã cho chức năng của chúng tôi khá tối thiểu nhưng hãy chạy qua các yếu tố chính:
- “UserName = Space(255)” – nếu bạn xem qua mã trong trình gỡ lỗi, điều bạn sẽ thấy là khi hàm “GetUser()” được gọi, biến “UserName” mà chúng ta chuyển đến nó thực sự bị ghi đè. Để điều đó xảy ra, biến cần có đủ bộ nhớ được phân bổ cho dữ liệu được lưu trữ, vì vậy chúng tôi chỉ phân bổ 255 ký tự khoảng trắng cho biến vì như vậy là quá đủ cho most (nếu không phải tất cả) tên người dùng được chứa trong đó.
- Chúng tôi nắm bắt giá trị trả về từ lệnh gọi hàm trong biến “returnStatus”. Số không (0) ở đây có nghĩa là cuộc gọi đã thành công, bất kỳ điều gì khác có nghĩa là đã xảy ra lỗi.
- Cuối cùng, biến “Tên người dùng” cần được dọn dẹp vì về cơ bản, nó sẽ được đệm bằng các ký tự null, vì vậy chúng tôi trích xuất các ký tự có trong biến trước khi tìm thấy Chr(0).
Thấy không - bây giờ điều đó không tệ đến thế! Và bây giờ, ít nhất là nếu bạn phải đối phó với hỏng cơ sở dữ liệu mdb, bạn sẽ biết ai là người sử dụng cơ sở dữ liệu cuối cùng để bạn có thể đổ lỗi cho ai! (Tôi đang nói đùa ở đây tất nhiên!)
Giới thiệu tác giả:
Mitchell Pond là một chuyên gia phục hồi dữ liệu trong DataNumen, Inc., công ty hàng đầu thế giới về công nghệ khôi phục dữ liệu, bao gồm sửa SQL Server vấn đề và các sản phẩm phần mềm phục hồi excel. Để biết thêm thông tin, hãy truy cập www.datanumennăm
