VBA를 통해 현재 데이터베이스를 사용하는 사람의 사용자 이름을 얻는 방법

지금 공유 :

귀하의 비즈니스에서 누가 특정 기록을 추가했는지 알고 싶으십니까? 아니면 누가 마지막으로 업데이트 했습니까? 이는 매우 일반적인 요구 사항이지만 안타깝게도 Microsoft Access가 기본으로 제공하는 기능은 아닙니다. 테이블에 "마지막 업데이트 자"필드를 추가하기 만하면 (대부분의 경우) most 하지만 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 파일에 포함 된 외부 함수에 대한 참조를 만들고 있다는 것입니다. dll에 포함 된 공용 함수 (이 경우 WNetGetUserA)에 대한 로컬 이름 (GetUser)을 선언하여이를 수행합니다. – 또한 함수 호출에 필요한 매개 변수를 정의합니다.이 경우에는 "이름", "사용자 이름"및 "길이"매개 변수가 있습니다. 여기서 우리가 정말로 관심을 갖는 유일한 것은“UserName”이지만 나머지도 제공해야합니다. 그 이유는 함수가 dll 내에서 설정되는 방식입니다.

이제 우리는이 외부 함수를 호출 할 자체 함수를 만듭니다. 함수에 대한 코드는 매우 적지 만 핵심 요소를 살펴 보겠습니다.

  1.  "UserName = Space (255)"– 디버거에서 코드를 단계별로 실행하면 "GetUser ()"함수가 호출 될 때 전달 된 "UserName"변수가 실제로 덮어 쓰여진다는 것을 알 수 있습니다. 이를 위해서는 변수에 데이터를 저장할 충분한 메모리가 할당되어 있어야합니다. 따라서 m에 대해 충분해야하므로 변수에 255 개의 공백 문자를 할당합니다.ost (모두가 아닌 경우) 포함 할 사용자 이름입니다.
  2. "returnStatus"변수의 함수 호출에서 반환 값을 캡처합니다. 여기서 영 (0)은 호출이 성공했음을 의미하고 그 밖의 모든 것은 오류가 발생했음을 의미합니다.
  3.  마지막으로 "UserName"변수는 기본적으로 null 문자로 채워 지므로 Chr (0)이 발견되기 전에 변수에있는 문자를 추출하므로 정리가 필요합니다.

보세요 – 이제 그렇게 나쁘지 않았습니다! 그리고 지금, 적어도 당신이 처리해야한다면 mdb 데이터베이스 손상, 누가 데이터베이스를 마지막으로 사용했는지 알 수 있으므로 누구를 비난 할 수 있습니다! (물론 여기서 농담이야!)

저자 소개 :

Mitchell Pond는 데이터 복구 전문가입니다. DataNumen, Inc.는 다음과 같은 데이터 복구 기술 분야의 세계적 리더입니다. 수리 SQL Server 문제 그리고 엑셀 복구 소프트웨어 제품. 자세한 내용은 WWW.datanumen.COM

지금 공유 :

댓글이 닫혀있다.