DLookup в Access 2010 с использованием IsNull и нескольких критериев

По сути, я пытаюсь выяснить, вошел ли пользователь в систему в данный момент, прежде чем создавать новую строку с помощью TimeIn, но с кодом в том виде, в котором он написан, пользователь может регистрироваться несколько раз без проверки (поле TLog_TImeOut равно null). Мой код указан ниже.

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

person Alan Marsh    schedule 29.04.2013    source источник


Ответы (1)


Ваш 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]'

Следует рассматривать как условие WHERE в операторе SQL.

Во-первых, если возможно, вы хотите избежать функций доступа из соображений скорости (не имеет большого значения в данном конкретном случае), поэтому использование Is Null лучше, чем IsNull(XXX)=True, но особенно в этой части:

NetID =  '[TempVars]![CurrentID]'

Это буквально сравнит NetID со строкой '[TempVar]![CurrentID]', поэтому вы хотите построить эту строку следующим образом:

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

(Предполагая, что [TempVars] — это скрытая форма, которую вы используете для сохранения значений переменных), которая, если CurrentID равна BOB в этой форме, даст:

NetID = 'BOB'

Это то, что вы хотите.

person Dan Metheus    schedule 29.04.2013
comment
Спасибо Дэн!!!!! Тем не менее, TempVars — это функция в Access 2010, которая позволяет передавать переменные из одной формы в другую… только что избавилась от форм! и это сработало!!! - person Alan Marsh; 30.04.2013
comment
Большой! Вы, ребята, и ваши новомодные [TempVars] — почему в мое время нам приходилось идти в гору по снегу, чтобы использовать скрытую форму для той же цели, и мы были рады сделать это! - person Dan Metheus; 30.04.2013