我有一个Access应用程序,要求用户输入他们的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
我注意到有时正确输入信息时,访问被拒绝。我试图调试一次,它给出了错误:“找不到网络路径。
“在Set oADsObject = oADsNamespace.OpenDSObject)
行。
不确定为什么会发生这种情况。是否更好地转换为LDAP?我已经尝试但无法正确构建LDAP URL。
答案 0 :(得分:3)
如果用户已通过Windows登录验证,为什么要让他们再次输入详细信息?
如果您需要知道登录的是哪个用户,可以通过以下功能轻松获取用户名:
Declare Function IGetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal sBuffer As String, lSize As Long) As Long Function GetUserName() As String On Error Resume Next Dim sBuffer As String Dim lSize As Long Dim x As Long sBuffer = Space$(32) lSize = Len(sBuffer) x = IGetUserName(sBuffer, lSize) GetUserName = left$(sBuffer, lSize - 1) End Function
答案 1 :(得分:0)
在GxP环境中,还需要输入至少密码。如果您登录到Windows无关紧要,则需要再次确认。