我在表单上有一条错误消息,用于检查文本框的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':对象必需”。当我调试时,行感谢Sergey S.指出修复此部分的拼写错误。 rst.FindFirst strLinkCriteria
会突出显示,并将鼠标悬停在它上面会给我文本strLinkCriteria = "[SocialSecurityNumber] = '123456789'"
(123456789是我数据库中已知的样本SSN)。
当我告诉消息框转到包含现有SSN的记录时,它会给我Run-time error '3021': No current record
。调试使用消息Me.Bookmark = rsc.Bookmark
突出显示行rsc.Bookmark = <No current record.>
。所以听起来我没有正确分配书签。
我之前从未使用过书签,所以我不确定我在这里做错了什么。任何帮助将不胜感激。
答案 0 :(得分:1)
您声明了rsc
,但使用了rst
。
将您的代码更改为
rsc.FindFirst strLinkCriteria
我建议在每个模块中始终使用Option Explicit
(默认可以在选项上更改),否则你将面临这种奇怪的错误。使用此选项,可以通过compiller找到拼写错误,而不是在运行时。