我有表单,其中用户必须输入公司名称,以避免重复,我写了On_Exit event的数据输入字段。它检查所有记录,如果发现重复,它会通知用户。问题是,我使用相同的表单查看输入的数据,然后执行相同的操作,尽管输入没有重复,但On_Exit event显示重复的警告。它的发生是因为代码检查所有的条目,由于它已经在数据库中,它自己创建并引发错误警报,这是一个代码缺陷,但我不知道如何避免。有没有人可以提供巧妙的方法来避免这个问题,而不用创建两个相同的表单(除了一个没有重复检查的表单)?
我的查重代码:
Private Sub Pareisk_pav_Exit(Cancel As Integer)
Dim Par_pav As String
Dim rst As DAO.Recordset
Dim Counter As Long
Set rst = CurrentDb.OpenRecordset("tblPareiskejai")
Do Until rst.EOF
Par_pav = rst(1)
If rst(1) = Me.Pareisk_pav.Value Then
Me.WarningLB.Caption = "Entry with this name already exist"
Exit Do
Else
Me.WarningLB.Caption = ""
End If
rst.MoveNext
Loop
Exit Sub我试图在我的代码中实现计数器来忽略第一个匹配,但在这种情况下,它只捕获第二个重复项,然后输入新条目。
计数器解决方案(未按预期工作)我尝试过:
Do Until rst.EOF
Par_pav = rst(1)
If rst(1) = Me.Pareisk_pav.Value Then
Counter = Counter + 1
If Counter = 2 Then
Me.WarningLB.Caption = "Entry with this name already exist"
Exit Do
End If
Else
Me.WarningLB.Caption = ""
End If
rst.MoveNext
Loop发布于 2019-07-05 14:56:27
我突然自己想出了一个解决方案。因为新条目在保存之前就获得了新的ID,所以我想我可以在我的优势中使用它,并在if子句中添加了And rst(0) <> Me.ID.Value。到目前为止,它工作得很好。完全编辑的代码:
Private Sub Pareisk_pav_Exit(Cancel As Integer)
Dim Par_pav As String
Dim rst As DAO.Recordset
Dim marker As Boolean
Set rst = CurrentDb.OpenRecordset("tblPareiskejai")
Counter = 0
Do Until rst.EOF
Par_pav = rst(1)
If rst(1) = Me.Pareisk_pav.Value And rst(0) <> Me.ID.Value Then
Me.WarningLB.Caption = "Name already exist!"
Exit Do
Else
Me.WarningLB.Caption = ""
End If
rst.MoveNext
Loop
Exit Sub
End Subhttps://stackoverflow.com/questions/56897599
复制相似问题