Обеспечение уникальных записей в форме (MS Access)

Используя форму в MS Access, мне нужно убедиться, что в таблицу вводятся только уникальные записи.

К сожалению, в ситуации, когда я не могу обеспечить уникальные записи с помощью первичных ключей таблицы.

У меня есть следующий код в BeforeUpdate для формы, но он не работает. Любая помощь будет принята с благодарностью!

Private Sub Form_BeforeUpdate(Cancel As Integer)
If DCount("*", "[Role_Details]", "[Role] = " & Me.[ComboRole] & " AND [Session] = " & Me.[ComboSession]) > 0 Then
    MsgBox "Duplicate!"
    Cancel = True
    Me.[ComboSession].SetFocus
    Exit Sub
End If
End Sub

Примечание. Имя таблицы — Role_Details. Имена полей — Роль и Сеанс. ComboRole и ComboSession являются метками полей формы.

Любые мысли о том, где я ошибся здесь?

Обновления##

Когда я открываю форму таблицы данных, она представляет всплывающее окно с надписью «Введите значение параметра» и «frm_Role_Details.Session». Я не уверен, почему это так, но я могу пройти мимо него и открыть форму.

Затем, когда я ввожу запись, появляется сообщение об ошибке «Ошибка времени выполнения» «2465»: не удается найти поле «| 1», указанное в вашем выражении. Оба поля являются текстовыми строками. Я в растерянности!


person Jay May    schedule 21.04.2021    source источник
comment
Что не работает? Это просто не дает ожидаемого результата, или сам код выдает ошибку?   -  person Martin    schedule 21.04.2021
comment
Звучит как проблема с неправильным экранированием значений. Просмотрите Как использовать параметры в VBA в различных контекстах в Microsoft Access?, чтобы избежать этого.   -  person Erik A    schedule 21.04.2021
comment
Какой тип данных имеют комбинированные выходы? они числового или строкового типа? Вам нужны скобки? Это также может помочь и отловить ошибки? support.microsoft.com/en-us/office/   -  person Nathan_Sav    schedule 21.04.2021
comment
Когда я открываю форму таблицы данных, она представляет всплывающее окно с надписью «Введите значение параметра» и «frm_Role_Details.Session». Я не уверен, почему это так, но я могу пройти мимо него и открыть форму. Затем, когда я ввожу запись, появляется сообщение об ошибке «Ошибка времени выполнения» «2465»: не удается найти поле «| 1», указанное в вашем выражении. Оба поля являются текстовыми строками. Я в недоумении по обоим пунктам, упомянутым выше.   -  person Jay May    schedule 21.04.2021
comment
Что вы подразумеваете под ярлыками полей формы? Это имена для выпадающих списков?   -  person June7    schedule 21.04.2021


Ответы (1)


При объединении в VBA текстовые поля требуют разделителей апострофа для входных данных.

If DCount("*", "[Role_Details]", "[Role] = '" & Me.[ComboRole] & "' AND [Session] = '" & Me.[ComboSession] & "'")> 0 Then

В полях даты/времени используется разделитель #.

В числовых полях не используются разделители.

person June7    schedule 21.04.2021
comment
Сработало как по маслу @June7, большое спасибо!! - person Jay May; 22.04.2021