【问题标题】:Access 2013 Open Form Filter issueAccess 2013 打开表单过滤器问题
【发布时间】:2018-02-13 02:26:30
【问题描述】:

我在 Access 2013 中使用 VBA 打开应用了过滤器的表单时遇到问题。我正在尝试过滤打开记录的数据和当前用户所属的部门。

对于我正在测试的用户,他们的部门是 6,数据表有 3 条记录,其部门是 6,IsOpen = Yes。

我正在使用的命令如下 - 表单打开,但在包含 Dlookup 时不显示任何数据(如果我只是使用 IsOpen 查询运行它,它会返回所有打开的记录)。

如果我将 Dlookup 放入表单上的一个字段中,它会返回当前用户的部门编号(在本例中为 6)。

如果我创建一个简单的查询来返回 IsOpen = Yes 和 Department = 6 的数据,我会返回预期的 3 条记录。

我的代码有问题吗?或者是实现我需要的更好方法?

DoCmd.OpenForm "frm_ServiceRequestRegister", acNormal, "", IsOpen = True And Department = DLookup("[lkp_Department]", "tbl_Users", "[id] =" & [TempVars]![CurrentUser]), , acNormal

任何帮助将不胜感激。

问候, 加里。

【问题讨论】:

    标签: vba ms-access ms-access-2013


    【解决方案1】:

    关键是Where参数需要用引号引起来。它是传递给OpenForm 函数的字符串。如果您排除引号,则在将任何内容传递给 OpenForm 之前评估“where 子句”,并且传递 truefalse 而不是您想要的。

    Dim userDept as long 'Maybe this is a string? I don't know your table
    userDept = DLookup("[lkp_Department]", "tbl_Users", "[id] =" & [TempVars]![CurrentUser])
    
    DoCmd.OpenForm "frm_ServiceRequestRegister", acNormal, "", "IsOpen = True And Department = " & userDept, , acNormal
    

    这没有产生错误的事实说明了一些事情中的一个或多个。

    1. 您没有在模块顶部设置显式选项(始终选中此选项Tools > Options > Editor > Require Variable Declaration
    2. 您的数据源中有一些控件/字段恰好允许按原样评估 IsOpen = True And Department = DLookup("[lkp_Department]", "tbl_Users", "[id] =" & [TempVars]![CurrentUser])

    将来调试此问题的任何一种方式都是单步执行代码并在即时窗格中执行参数。如果它们不是您所期望的,那就是问题所在。

    【讨论】:

    • 谢谢布拉德。你的解决方案奏效了,你的解释很有道理。
    【解决方案2】:

    你应该在 where 语句中将变量部分的固定部分用引号括起来并用 '&' 连接起来,像这样: "IsOpen = True And Department =" & DLookup ("[lkp_Department]", "tbl_Users" [id] = "& [TempVars]![CurrentUser]),,acNormal

    【讨论】:

    • 谢谢拉斐尔。我尝试了你和布拉德的建议,都奏效了。
    猜你喜欢
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 2020-03-25
    相关资源
    最近更新 更多