2

本质上,我试图在使用 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
4

1 回答 1

4

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 NullIsNull(XXX)=True但尤其是这部分更好:

NetID =  '[TempVars]![CurrentID]'

这将从字面上将 NetID 与字符串 '[TempVar]![CurrentID]' 进行比较,因此您需要像这样构建此字符串:

NetID = '" & Forms![TempVars]![CurrentID] & "'"

(假设 [TempVars] 是用于保存变量值的隐藏表单),如果 CurrentID 是该表单上的 BOB,则会产生:

NetID = 'BOB'

这就是你想要的。

于 2013-04-29T04:05:58.810 回答