基本上我试图找到用户当前是否在使用TimeIn创建新行之前已登录,但是在编写代码时,用户可以多次签入而不签出(TLog_TImeOut字段为空)。我的代码如下所示。
If Not IsNull(DLookup("[TLog_TimeIn]", "TIMELOG", "IsNull(TLog_TImeOut)= True And NetID = '[TempVars]![CurrentID]'")) Then
MsgBox ("Please Check out!")
DoCmd.Close acForm, "CHECKIN", acSaveNo
Exit Sub
Else
NetID = [TempVars]![CurrentID]
TLog_TimeIn = Now()
MsgBox ("Thanks for checking in!")
DoCmd.Close acForm, "CHECKIN", acSaveYes
Exit Sub
End If
答案 0 :(得分:3)
您的DLOOKUP
应该更像这样:
If Not IsNull(DLookup("[TLog_TimeIn]", "TIMELOG", "TLog_TimeOut Is Null And NetID = '" & Forms![TempVars]![CurrentID] & "'")) Then
特别是你的情况 -
IsNull(TLog_TImeOut)= True And NetID = '[TempVars]![CurrentID]'
应该像 SQL 语句中的WHERE
条件一样对待。
首先,如果可能的话,您希望出于速度原因而避免使用Access函数(在这种情况下并不是很重要),因此使用Is Null
优于IsNull(XXX)=True
但特别是这部分:
NetID = '[TempVars]![CurrentID]'
这会将NetID与字符串'[TempVar]![CurrentID]'进行比较,所以你想要的是像这样构建这个字符串:
NetID = '" & Forms![TempVars]![CurrentID] & "'"
(假设[TempVars]是一个用于保存变量值的隐藏表单),如果该表格上的CurrentID为BOB,则会产生:
NetID = 'BOB'
这就是你想要的。