我有一个访问项目,我在所有表单中使用全局变量来显示用户登录的内容。
Public activeUser As String
在其中一个表单中,我希望根据登录的人显示数据。表单上有几个字段,因此我想在整个表单中使用查询作为数据源。
现在这是我的问题:
我尝试使用activeUser
中的值进行查询,以查找活动用户应该能够看到的所有值:
SELECT WBS_Id,
Verantw,
Commentaar
FROM tbl_New_WPE_User
WHERE UserName LIKE activeUser
为什么这不起作用?我怎样才能让它发挥作用?
答案 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