Access 中的 DoCMD.OpenForm - 使用 WHERE 打开具有有限记录集的表单

Posted

技术标签:

【中文标题】Access 中的 DoCMD.OpenForm - 使用 WHERE 打开具有有限记录集的表单【英文标题】:DoCMD.OpenForm in Access - Opening a Form with limited recordset using WHERE 【发布时间】:2013-08-05 17:00:34 【问题描述】:

我在 MS Access 工作。我正在尝试根据用户的登录信息(由某些 vba 代码确定)打开一个不向用户显示某些记录集的表单。

使用以下 DoCmd.OpenForm,打开表单,但我希望对用户隐藏的记录集(其中 G_Var = YES)仅被过滤掉。所以用户可以删除过滤的数据表表单并查看行(我不想禁用过滤器)。我做错了什么?

DoCmd.OpenForm "Metrics", acFormDS, , "G_Var = 'NO'"  

我也在想也许我可以编写某种查询来检索这些信息。也许是这样的:

rs.Open "Select * FROM Metrics WHERE G_Var = 'NO';", CurrentProject.Connection

我只是不明白我将如何获取此查询信息并将其输出到表单中。通过定义记录源,我能够以这种方式完成任务:

Private Sub btnMetrics_From_Click()

  DoCmd.OpenForm "Metrics", acFormDS
  Forms.Item("Start Form").Visible = False

End Sub

Private Sub Form_Activate()
  Dim rs As New ADODB.Recordset
  Dim sql As String
  Dim Boo As Boolean

    g_User = UserInfo(ap_GetUserName())
    Boo = False

rs.Open "SELECT * FROM tbl_User_Info WHERE G_Var_Access = TRUE;", CurrentProject.Connection

Do Until rs.EOF = False
    If rs.Fields("User_Name").Value = g_User Then
        Boo = True

        Exit Do
    End If
Loop

rs.Close

If Boo = True Then

Else
    Me.RecordSource = "SELECT * FROM Metrics WHERE G_Var = 'NO';"
End If

    Me.Requery

End Sub

谢谢

【问题讨论】:

【参考方案1】:

您可以尝试这样的事情作为您的主要 RecordSource SQL...

SELECT M.*
FROM Metrics AS M,tbl_User_Info AS U
WHERE U.User_Name=CurrentUser()
AND M.G_Var LIKE IIF(U.G_Var_Access=TRUE,'*','NO')

【讨论】:

以上是关于Access 中的 DoCMD.OpenForm - 使用 WHERE 打开具有有限记录集的表单的主要内容,如果未能解决你的问题,请参考以下文章

在 Access 中创建导航窗口

Access VBA:未绑定的子窗体控件不可点击

MS Access VBA - 不知何故没有通过 OpenArgs,总是 NULL

MS Access 2007 - OpenArgs 没有将值传递给下一个表单?

访问,选择案例 ActiveControl.Name?

访问具有多个值的文本框进行查询