【问题标题】:VBA, MS Access: Windows AD to access a tableVBA、MS Access:Windows AD 访问表
【发布时间】:2017-05-11 19:16:02
【问题描述】:

我有一个 MS Access 数据库,其中有一个主表。

20 多个用户。他们的名字在主表中的一列中。 我还创建了 User 表(使用 User NameLastName 和 Win AD ID) 我为数据更新和修改创建了一个拆分表单。涉及到一些 VBA 模块。 我正在努力做到这一点: - 每次用户打开表单时 - 它都会有预过滤的记录,仅与他/她的 Win AD ID 名称相关联 - 用户将无法查看/查询任何其他用户的记录

我们有人们用来登录他们的机器的 ID,我可以在 VBA 代码中使用它来实现上述目标吗?

这就是我现在在组合框中筛选用户(项目经理)的方式:

'Check if there is a value for Project Manager and build filter string
If Not IsNull(Me.cmbProjMang) And Me.cmbProjMang <> "" Then
    If intFilterSet Then
        strFilter = strFilter & " AND "
    End If

    strFilter = strFilter & "[PM] = " & Chr(34) & Me.cmbProjMang & Chr(34)
    intFilterSet = 1
End If

该功能 - 我的问题的解决方案的可能部分 - Print Environ("UserName") 是否会添加到此处或不同的 Sub 中?

谢谢! 密歇根州

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

    获取用户 ID 并过滤 Form_Load 上的表单。

    把它放在一个标准模块中:

    Option Explicit
    
    'Username
    Private Declare Function apiGetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
    Public Function Username() As String
        On Error GoTo ErrProc
    
        Dim lnglen As Long, lngX As Long, strName As String
    
        strName = String(254, 0)
        lnglen = 255
        lngX = apiGetUserName(strName, lnglen)
    
        If lngX <> 0 Then Username = Left(strName, lnglen - 1)
    
    Leave:
        On Error GoTo 0
        Exit Function
    
    ErrProc:
        MsgBox Err.Description, vbCritical
        Resume Leave
    End Function
    

    过滤表单:

    Private Sub Form_Load()
        Dim user_ As String
            user_ = YourModuleName.Username
    
        With Me
            .Filter = "[Win AD ID]='" & user_ & "'"
            .FilterOn = True
        End With
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 2014-05-12
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多