我有一个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/