使用DLookup检查记录是否存在(使用多个标准)

时间:2012-04-21 07:31:49

标签: ms-access vba 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 + "'" )) Then
MsgBox "Record Exists"
End If.

End Sub

这样做(或应该做的)是确保没有其他人在同一场比赛中拥有相同的奖牌。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

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

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

我使用以下内容清理了您的代码

  • 我用&替换了+像Remou说的
  • 将.value更改为.columns(0)。如果您要查找的列不是第一列,请将0更改为适当的值
  • value()函数
  • 删除了行继续_。 (个人喜好,随意忽略)

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