2

基本的に、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
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条件のように扱う必要があります。

まず、可能であれば、速度の理由からアクセス関数を避けたいので (この特定のケースでは大したことではありません) 、特にこの部分よりも使用するIs Null方が良いです:IsNull(XXX)=True

NetID =  '[TempVars]![CurrentID]'

これは文字通り NetID を文字列 '[TempVar]![CurrentID]' と比較するため、この文字列を次のように作成します。

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

([TempVars] が変数値を保存するために使用する非表示のフォームであると仮定します) CurrentID がそのフォームの BOB である場合、次の結果が得られます。

NetID = 'BOB'

これはあなたが望むものです。

于 2013-04-29T04:05:58.810 に答える