ничего не делает - просто сидит там
Просто проверяю, так как вы сказали, что неопытны с Access ... событие обновления формы не запускается, пока не будет предпринята попытка сохранения записи. Это может не произойти автоматически, как только пользователь вводит данные во все поля. Однако вы можете запустить обновление, перейдя к другой записи в подчиненной форме или выбрав такой метод, как «Главное меню» - «Сохранить запись из доступа» (2003).
Я не вижу ничего плохого в вашей процедуре BeforeUpdate. Тем не менее, я бы преобразовал его, используя функцию DCount () вместо открытия набора записей ADO. (См. Раздел справки Access для DCount)
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strCriteria As String
strCriteria = "subscriptionNo=" & Me.subscriptionNo & " AND journal=" & Me.Journal & _
" AND volume=" & Me.volume & " AND issue=" & Me.issue
Debug.Print strCriteria
If Dcount("subscriptionNo", "CustomerAnswerD", strCriteria) > 0 Then
MsgBox ("Already entered")
Cancel = True
Me.Undo
End If
End Sub
Предполагается, что поля подпискиNo, журнала, тома и выпуска таблицы являются числовыми типами данных. Если какой-либо из них имеет текстовый тип, вам необходимо заключить значения в кавычки в strCriteria.
Я добавил Debug.Print strCriteria , чтобы вы могли просмотреть законченное строковое выражение в окне «Немедленно». Вы также можете устранить неполадки этой завершенной строки, скопировав ее и вставив в представление SQL нового запроса в качестве предложения WHERE.
Кроме того, рассмотрите возможность добавления уникального индекса подписки Нет, журнала, тома и выпуска в дизайн таблицы CustomerAnswerD. Таким образом, вы можете обеспечить уникальность, не полагаясь исключительно на свою форму, чтобы сделать это. Индекс также даст вам более высокую производительность с помощью функции DCount или вашего исходного оператора SELECT набора записей.
Если вы сохраняете исходный подход к набору записей, закройте набор записей и установите переменную объекта = Nothing перед выходом из процедуры.