Access 2010 VBA - 打开新记录集 - 在打开之前意外保存的值

时间:2015-06-06 13:08:17

标签: access-vba

如果用户根据姓氏和身份证号码存在,我会自动检测脚本。如果它存在于数据库中,则表单将使用正确的数据自动完成,并在保存时更新。如果没有,在用户输入其余数据并按下保存按钮后,将保存新记录。

我遇到的问题是当脚本自动检测到数据库中存在用户时,它会将当前数据(作为姓氏和ID号)保存到表中,而将所有其他字段保留为空白。

我的代码:

Private Sub Last_AfterUpdate()

    Dim Check As Integer
    Dim records As Recordset
    Dim tmp As String
    Dim tmp1 As String
    Dim db As Database

    Set db = CurrentDb

    If Not IsNull(Me.ID) Then
        tmp = Me.ID
    End If

    If Not IsNull(Me.Last) Then
        tmp1 = Me.Last
    End If

    Set records = db.OpenRecordset("SELECT * from [EmailList] WHERE ID1= '" & tmp & "' AND " & "Last = '" & tmp1 & "'")
    Me.Recordset.FindFirst "ID=" & records.Fields("ID")

End Sub

注意:字段IDID1之间存在差异。它们是我使用的两种身份识别形式。

1 个答案:

答案 0 :(得分:1)

据我所知,您正在AfterUpdate中执行此操作,因此在您检查用户是否存在之前,正在创建记录。我想你想要更像这样的东西:

首先检查用户是否存在的函数:

Public Function UserExists(intID As Integer, strLastName As String) As Boolean
    'If user exists in EmailList Table
    If Nz(DLookup("Last", "EmailList", "Last = '" & strLastName & "' AND ID = " & intID), "") <> "" Then
        UserExists= True
    Else
        UserExists= False
    End If

End Function

然后在您的BeforeUpdate事件中,您想要执行以下操作:

Private Sub Last_BeforeUpdate(Cancel As Integer)

    'If user filled out both fields
    If Nz(Me.ID, "") <> "" And Nz(Me.Last, "") <> "" Then

        'If they exist in the database
        If UserExists(Me.ID, Me.Last) Then

           'Cancel saving record and go to the record with their information
           Cancel = True
           Me.Recordset.FindFirst "ID=" & records.Fields("ID")
        End If

    Else 'User didn't fill out both fields.
       MsgBox "You must fill out ID and Last field"
    End If

End Sub

这是粗略的编码,但我觉得这是你想要完成你想要的方向。逻辑将需要根据您的情况进行调整。