【问题标题】:Using Null in a DLookup Criteria在 DLookup 标准中使用 Null
【发布时间】:2018-10-18 19:22:30
【问题描述】:

我正在创建一个数据库来管理进出事件系统的人员流动。我的想法是使用 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

【问题讨论】:

  • "{frm_ics238Table]" 更改为 "[frm_ics238Table]"
  • @dbmitch 谢谢你的收获。我几乎一整天都在关注这个。改变它并得到运行时错误'6':溢出
  • DLookup 函数周围也没有结束括号。或许您应该拆分单个逻辑并让每个逻辑先工作,然后再一次构建整个语句
  • @dbmitch 我很确定有一个结尾括号,结尾有两个((开头和两个))。我看不到其他人
  • 你为什么不在上面发布更新的代码和错误 - 现在看起来你已经省略了标准的双引号。您的一个问题中已更正了两个错误

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


【解决方案1】:

从您的原始问题来看,您现在看起来没有对其进行编辑以指示更新的代码和错误,您有:

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

所以它可能看起来像:

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 - 编号字段

我的示例数据表

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

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

最后 - 测试按钮点击结果:

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

【讨论】:

  • 感谢您的帮助,我尝试了您的建议,但它只是给了我一个运行时错误代码 2471。我会继续努力。看起来使用 is null 函数对于 DLookup 来说并不可行
  • 我编辑了这个问题,以表明如果代码与表格设计假设相匹配,它确实有效。到目前为止,我还没有看到您的任何代码更新。
猜你喜欢
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-12
相关资源
最近更新 更多