如果用户根据姓氏和身份证号码存在,我会自动检测脚本。如果它存在于数据库中,则表单将使用正确的数据自动完成,并在保存时更新。如果没有,在用户输入其余数据并按下保存按钮后,将保存新记录。
我遇到的问题是当脚本自动检测到数据库中存在用户时,它会将当前数据(作为姓氏和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
注意:字段ID
和ID1
之间存在差异。它们是我使用的两种身份识别形式。
答案 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
这是粗略的编码,但我觉得这是你想要完成你想要的方向。逻辑将需要根据您的情况进行调整。