Как проверить дубликаты имен, но не активировать себя - PullRequest
1 голос
/ 05 июля 2019

У меня есть форма, в которой пользователь должен ввести название компании, чтобы избежать дубликатов, которые я написал 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

1 Ответ

0 голосов
/ 05 июля 2019

Я неожиданно сам придумал решение.Поскольку новая запись получает новый идентификатор еще до сохранения, я решил использовать его в своих интересах и добавил 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
...