在SQL查询中使用全局变量

时间:2014-04-01 11:38:01

标签: sql vba ms-access-2010

我有一个访问项目,我在所有表单中使用全局变量来显示用户登录的内容。

Public activeUser As String

在其中一个表单中,我希望根据登录的人显示数据。表单上有几个字段,因此我想在整个表单中使用查询作为数据源。

现在这是我的问题:

我尝试使用activeUser中的值进行查询,以查找活动用户应该能够看到的所有值:

SELECT WBS_Id, 
       Verantw, 
       Commentaar 
  FROM tbl_New_WPE_User 
 WHERE UserName LIKE activeUser

为什么这不起作用?我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:4)

一种选择是创建一个VBA函数来返回全局变量的值。例如

Public Function GetActiveUser() As String
    GetActiveUser = activeUser
End Function

然后你可以在保存的查询中使用该功能,如

SELECT WBS_Id, 
       Verantw, 
       Commentaar 
FROM tbl_New_WPE_User 
WHERE UserName LIKE GetActiveUser()

但是,在这种特殊情况下,我倾向于摆脱全局变量,只需调用函数来获取当前用户(即用于填充全局变量的代码)。我怀疑每次检索值的额外开销(例如,通过从.Username对象获取WScript.Network属性)将非常多,如果它确实是一个问题那么你总是可以考虑在你的函数中使用Static变量来缓存值。

答案 1 :(得分:0)

我猜SQL是以字符串形式用VBA代码编写的:

Public activeUser As String
dim tmpSql As String

tmpSql = "SELECT WBS_Id, Verantw, Commentaar FROM tbl_New_WPE_User WHERE UserName LIKE activeUser"

如果是,那么你应该做以下事情:

tmpSql = "SELECT WBS_Id, Verantw, Commentaar FROM tbl_New_WPE_User WHERE UserName LIKE " & activeUser & "*"

其中Access中的*等效于SQL Server中的%

现在,如果SQL语句是在Access Query中编写的,那么就不可能使用VBA变量activeUser