Access 2013 Open Form Filter问题

时间:2018-02-13 02:26:30

标签: vba ms-access-2013 access

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

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

我正在使用的命令在下面 - 表单打开,但是当包含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

任何帮助都将不胜感激。

此致 加里。

2 个答案:

答案 0 :(得分:0)

关键是Where参数需要在引号中。它是一个传递给OpenForm函数的字符串。如果你在引号中排除" where子句"在将任何内容传递给OpenForm之前进行评估,并且传递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])按原样进行评估。
  3. 无论如何,将来调试此方法的方法是单步执行代码并在即时窗格中执行参数。如果它们不是你所期望的,那就是问题。

答案 1 :(得分:0)

你应该在where语句中将变量部分的固定部分分开,用引号括起来并加上'&',如下所示:“IsOpen = True And Department =”& DLookup(“[lkp_Department]”,“tbl_Users”[id] =“& [TempVars]![CurrentUser]),, acNormal