我有一个Access App,要求用户输入其Windows域用户和密码才能输入。我已使用以下VBA代码完成此操作:

Function WindowsLogin(ByVal strUserName As String, ByVal strpassword As String, ByVal strDomain As String) As Boolean
    'Authenticates user and password entered with Active Directory.

    On Error GoTo IncorrectPassword

    Dim oADsObject, oADsNamespace As Object
    Dim strADsPath As String

    strADsPath = "WinNT://" & strDomain
    Set oADsObject = GetObject(strADsPath)
    Set oADsNamespace = GetObject("WinNT:")
    Set oADsObject = oADsNamespace.OpenDSObject(strADsPath, strDomain & "\" & strUserName, strpassword, 0)

    WindowsLogin = True    'ACCESS GRANTED

ExitSub:
    Exit Function

IncorrectPassword:
    WindowsLogin = False   'ACCESS DENIED
    Resume ExitSub
End Function

我注意到有时正确输入信息后, Access 将被拒绝。我尝试调试一次,但出现错误:“未找到网络路径。
Set oADsObject = oADsNamespace.OpenDSObject)行上。

不知道为什么有时会发生这种情况。改为转换为LDAP更好吗?我已经尝试过,但无法正确构造LDAP URL。

最佳答案

如果用户已经通过其Windows登录名进行了身份验证,为什么还要让他们再次输入详细信息?

如果您需要知道哪个用户已登录,则可以通过以下功能轻松获得用户名:

声明函数IGetUserName库“advapi32.dll”别名“GetUserNameA”(ByVal sBuffer为字符串,lSize为长)

函数GetUserName()作为字符串

关于错误继续

Dim sBuffer作为字符串
尺寸尽可能长
昏暗x长

sBuffer =空格$(32)
lSize = Len(sBuffer)
x = IGetUserName(sBuffer,lSize)
GetUserName = left $(sBuffer,lSize-1)

结束功能

关于vba - VBA:使用Windows身份验证登录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12144282/

10-13 00:31