2013-04-29 107 views
2

本質上,我試圖在用TimeIn創建新行之前查找用戶當前是否已登錄,但是在編寫代碼時,用戶可以多次檢查檢出(TLog_TImeOut字段爲空)。我的代碼列在下面。DLookup在Access 2010中使用IsNull和多個條件

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 

回答

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條件進行處理。

首先,如果可能的話,要避免對速度的原因訪問功能(不是什麼大不了的事在這個特殊的情況下),所以使用Is NullIsNull(XXX)=True更好,但尤其是這部分:

NetID = '[TempVars]![CurrentID]' 

這是怎麼回事「![TempVar中] [CurrentID]」從字面上比較的NetID爲字符串,所以你想要的是建立這個字符串是這樣的:

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

(假設[TempVars的]是您用來保存變量隱藏窗體值),如果CurrentID是BOB在這種形式將產生:

NetID = 'BOB' 

這是你想要的。

+0

謝謝丹!!!!!然而,TempVars是access 2010中的一個功能,它允許你將變量從一個表單傳遞到下一個表單......只是擺脫了表單!它的工作! – 2013-04-30 04:16:06

+0

太棒了!你的孩子和你新開的[TempVars] - 爲什麼在我的一天,我們不得不在雪地上坡走路,爲了同樣的目的使用隱藏的表格,我們很高興這麼做! – 2013-04-30 07:32:11

相關問題