|   |   |   | 
Проверка 
  дублирования значений первичного ключа
Обычно проверка 
  дублирования значений первичного ключа задается на уровне таблицы, т. е. когда 
  вы определили поле в таблице как первичный ключ, значение свойства 
Индексированное 
  поле 
(indexed) автоматически устанавливается равным Yes (No Duplicates) 
  — Да (Совпадения не допускаются). Однако эта проверка выполняется только тогда, 
  когда запись сохраняется в базе данных. Если значение ключевого поля вводится 
  в форме пользователем, как, например, в таблице "Клиенты" (Customers), 
  то эту проверку лучше выполнить сразу после ввода данных в это поле. Наиболее 
  подходящим событием для этого является событие 
До изменения 
(Before Update). 
  В форме "Клиенты" (Customers) элемент управления "КодКлиента 
  (CustomerID) содержит идентификатор клиента. Событие 
До изменения 
(Before 
  Update) этого поля обрабатывается с помощью макроса "Клиенты" (Customers.ValidateID), 
  который выполняет необходимую проверку. Мы покажем, как можно обработать это 
  событие с помощью процедуры VBA. Данная процедура может глядеть следующим образом.
Private Sub КодКлиента_ВеforeUpdate (Cancel As Integer)
Dim 
  rs As Recordset
Set rs = CurrentDB.Openrecordset("Клиенты", dbOpenTable)
rs.index = "PrimaryKey"
rs.Seek "=", Me!КодКлиента
if 
  Not rs.NoMatch Then
MsgBox 
  "Клиент с таким идентификатором уже существует в базе"
Cancel = True
End If
rs .Close
End 
  Sub
Поиск записи со значением ключа, совпадающим с введенным значением поля "КодКлиента" (CustomerlD), выполняется с помощью метода Seek объекта Recordset. Этот метод обеспечивает быстрый поиск необходимой записи. Применить его можно только к набору записей табличного типа, поэтому при создании этого набора записей используется внутренняя константа dbOpenTable. Если такая запись найдена, свойство NoMatch объекта Recordset принимает значение False. В этом случае процедура выведет сообщение, что такой пользователь уже существует и присвоит значение True аргументу Cancel. Это позволяет отменить обновление значения элемента управления. Если значение свойства NoMatch объекта Recordset равно True, процедура закрывает набор записей (рекомендуется не забывать это делать) и завершает свою работу.
|   |   |   |