设置并移动到书签

时间:2016-10-07 03:52:36

标签: ms-access access-vba ms-access-2013

我在表单上有一条错误消息,用于检查文本框的BeforeUpdate事件上的现有SSN。如果它已存在于数据库中,则会为该用户提供一个消息框,并且可以选择转到现有记录。我正在使用this example code here。我的代码如下。

Private Sub txtSocialSecurityNumber_BeforeUpdate(Cancel As Integer)

    'check for existing SSN
    Dim SSN As String
    Dim strLinkCriteria As String
    Dim rsc As Recordset

    Set rsc = Me.RecordsetClone

    SSN = Me.txtSocialSecurityNumber.Value
    strLinkCriteria = "[SocialSecurityNumber] = " & "'" & SSN & "'"

    'look for duplicates
    If DCount("SocialSecurityNumber", "Person", LinkCriteria) > 0 Then
        'Undo duplicate entry
        Me.Undo
        'error message
        intResponse = MsgBox("Social Security Number " & SSN & " already exists in database." & _
            vbCrLf & vbCrLf & "Would you like to view the record?", vbYesNo, "Duplicate SSN")
            If intResponse = vbYes Then
                'go to record
                rsc.FindFirst strLinkCriteria
                Me.Bookmark = rsc.Bookmark
            ElseIf intResponse = vbNo Then
                Exit Sub
            End If
    End If

    Set rsc = Nothing

End Sub

根据这段代码,以及我查了几个其他的例子,似乎我正在做的一切正确,但我不能因为当我尝试运行代码并转到现有记录时,我收到错误“运行时错误'424':对象必需”。当我调试时,行rst.FindFirst strLinkCriteria会突出显示,并将鼠标悬停在它上面会给我文本strLinkCriteria = "[SocialSecurityNumber] = '123456789'"(123456789是我数据库中已知的样本SSN)。感谢Sergey S.指出修复此部分的拼写错误。

当我告诉消息框转到包含现有SSN的记录时,它会给我Run-time error '3021': No current record。调试使用消息Me.Bookmark = rsc.Bookmark突出显示行rsc.Bookmark = <No current record.>。所以听起来我没有正确分配书签。

我之前从未使用过书签,所以我不确定我在这里做错了什么。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您声明了rsc,但使用了rst。 将您的代码更改为

rsc.FindFirst strLinkCriteria

我建议在每个模块中始终使用Option Explicit(默认可以在选项上更改),否则你将面临这种奇怪的错误。使用此选项,可以通过compiller找到拼写错误,而不是在运行时。