在DLookup标准中使用Null

时间:2018-05-08 18:49:07

标签: vba ms-access access-vba ms-access-2010

我正在创建一个数据库来管理事件系统内外的人员流动。我的想法是使用DLookup函数允许我在结帐日期中识别空值。这样我就可以防止有人在没有先退出的情况下跳过事件。

如果可能,我想获取EVENT ID和COMMAND POST ID,这样我就可以创建一条错误消息,告诉我成员仍然附着的事件。

'***Section 1 - Ensure member is Checked out and DEMOBed from previous incidents
'******Variables
'*********Variable to hold the Member ID
Dim id As Integer
'*********Variable to hold the checkout status
Dim checkout As String
'*********Variable to hold the Event ID
Dim eventID As Integer


'******Code Block 1 - Check for Null Values
id = Me.Text18
Forms![frm_ics238Table].Refresh

If Not IsNull(DLookup("[eventID]", "[frm_ics238Table]", "[checkoutDate] is Null And employeeID = '" & Me.Text18 & "'")) Then
    MsgBox "y"
End If
End Sub

1 个答案:

答案 0 :(得分:0)

从你原来的问题来看,你现在看起来并没有编辑它来表明更新的代码和错误,你有:

id = Me.Text18
Forms![frm_ics238Table].Refresh

If Not IsNull(DLookup("[eventID]", "[frm_ics238Table]", "[checkoutDate] is Null And employeeID = '" & Me.Text18 & "'")) Then
    MsgBox "y"
End If

我认为这些可能会有所帮助:

  1. "[frm_ics238Table]"应为表格:"[tbl_ics238Table]"
  2. ID似乎被声明为整数,但您将其用作 串。如果employeeID实际上是一个数字字段,则删除引号 employeeID = '" & Me.Text18 & "'"左右employeeID = " & ID & "
  3. 您也可以尝试使用IsNull([checkoutDate])代替 [checkoutDate] is Null
  4. 所以它可能看起来像:

    If Not IsNull(DLookup("[eventID]", "[tbl_ics238Table]", "IsNull([checkoutDate]) And (employeeID = " & ID & ")")) Then
        MsgBox "y"
    End If
    

    更好的做法是将标准放入字符串变量中,以便您可以先调试并测试它

    Dim strCriteria as String
    strCriteria = "IsNull([checkoutDate]) And (employeeID = " & ID & ")"
    Debug.Print strCriteria
    
    If Not IsNull(DLookup("[eventID]", "[tbl_ics238Table]", strCriteria)) Then
        MsgBox "y"
    End If
    

    编辑:工作代码证明:

    并非我不相信你,但如果你描述的内容符合我的假设,我不相信它不起作用。

    我使用以下假设成功测试:

    • eventID - 数字字段
    • checkoutDate - 日期/时间字段
    • employeeID - 数字字段

    我的样本数据表

    table

    然后我在表单上放置一个命令按钮来测试代码:

    Private Sub Command8_Click()
        Dim strCriteria As String
        Dim ID As Integer
    
        ID = 4
    
        strCriteria = "IsNull([checkoutDate]) And (employeeID = " & ID & ")"
        Debug.Print strCriteria
    
        If Not IsNull(DLookup("[eventID]", "[tbl_ics238Table]", strCriteria)) Then
            MsgBox "y"
        End If
    
    End Sub
    

    最后 - 测试按钮点击导致:

    Results

      

    总之 - 如果您仍然收到错误,那么您可以更新   你的代码和桌面设计的问题。