2016-10-07 33 views
0

我在窗體上檢查文本框的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':Object Required」。當我調試時,行 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

你宣佈rsc,但使用rst。 更改您的代碼

rsc.FindFirst strLinkCriteria 

而且我總是建議每個模塊中使用Option Explicit(默認可以在選項中更改),否則你會面臨這樣那樣奇怪的錯誤。有了這個選項,拼寫錯誤就會被發現,而不是在運行時。

+1

@ crlast86:真的不能強調'Option Explicit'有多重要。請立即設置此選項,並將其添加到所有現有模塊。 http://stackoverflow.com/a/37792963/3820271 – Andre

+0

這解決了這個問題,但現在我有一個新的。更新我的問題以反映它。 – crlast86

+0

我懷疑這一點。沒有聲明'intResponse'。 – Gustav