Ms access 使用DLookup检查记录是否存在(具有多个条件)

Ms access 使用DLookup检查记录是否存在(具有多个条件),ms-access,vba,Ms Access,Vba,我试图在我的VBA中创建一个函数,如果他们试图插入的记录已经存在,但返回的类型不匹配 EventCombo是一个整数 MedalCombo是字符串 Private Sub MyCombo_BeforeUpdate(Cancel As Integer) If Not IsNull(DLookup("RacerID", "Medals", "RaceID = " + EventCombo.Value _ + " AND Medal = '" + MedalCombo.Value + "'" ))

我试图在我的VBA中创建一个函数,如果他们试图插入的记录已经存在,但返回的类型不匹配

EventCombo是一个整数 MedalCombo是字符串

Private Sub MyCombo_BeforeUpdate(Cancel As Integer)

If Not IsNull(DLookup("RacerID", "Medals", "RaceID = " + EventCombo.Value _
+ " AND Medal = '" + MedalCombo.Value + "'" )) Then
MsgBox "Record Exists"
End If.

End Sub
这样做(或应该这样做)是为了确保没有其他人在同一场比赛中获得相同的奖牌


我做错了什么?

对于Access中的组合框,您需要确保.value确实是您想要的。通常,第一列是隐藏的,即.value,而下拉框中可见的不是.value。当使用组合框消除混淆时,我使用.columns属性

另外,为了确保组合框的结果是数字而不是文本(因为在示例中没有使用引号),我使用val()函数将组合框数据转换为数字。如果它已经是一个数字,这将没有效果。否则,如果它是以字符串形式存储的数字,则会将其转换为数字。这可能不是严格必要的,但它消除了另一个可能的问题。如果combobox列的值是无法转换为数字的文本,它将返回0,您可以在代码中测试该值

我用下面的代码清理了您的代码

  • 我将+替换为&就像Remou所说的那样
  • 将.value更改为.columns(0)。如果要查找的列不是第一列,请将0更改为适当的值
  • value()函数
  • 删除了行延续u3;。(个人偏好,可随意忽略)


要在VBA中连接,+可能会导致返回空字符串时出现问题。你确定MedalCombo的绑定字段不是数字吗?我认为,最好使用绑定列值,而不是引用列,除非有特殊原因需要该列。如果引用绑定列,则无需更改所有代码即可轻松更改sql。此外,Val完全没有必要。
Private Sub MyCombo_BeforeUpdate(Cancel As Integer)

    If Not IsNull(DLookup("RacerID", "Medals", "RaceID = " & Val(EventCombo.Columns(0)) & " AND Medal = '" & MedalCombo.Columns(0) & "'")) Then
        MsgBox "Record Exists"
    End If

End Sub