我有一个用户必须输入公司名称的表格,以避免重复我在数据输入字段中写的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
我试图在代码中实现Counter以忽略第一个匹配项,但是在这种情况下,它仅捕获第二个重复项,然后输入新条目。
计数器解决方案(无法正常工作),我已经尝试过:
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
答案 0 :(得分:0)
我突然想出了一个解决方案。由于新条目甚至在保存之前就获得了新ID,因此我认为我可以利用它,并在我的And rst(0) <> Me.ID.Value
子句中添加了if
。到目前为止,它工作正常。完整编辑的代码:
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 Sub