Есть ли способ создать ограничение в столбце таблицы, чтобы предотвратить повторяющиеся записи?
Я пытаюсь ограничить доступ повторяющихся записей в столбце.
Причина в том, что у меня заработная плата за несколько лет, которую можно вводить любое количество раз.
Например,
ID Salary Year
22 $20000 2013
22 $15000 2012
22 $20000 2013 <- Causes duplicate entries in my report
23 $20000 2013 <- Need to have 2013 here though
Я хочу, чтобы пользователь не мог ввести 2013 более одного раза в столбец моей таблицы COMP.
РЕДАКТИРОВАТЬ: Добавлены идентификационные номера, потому что у меня есть несколько человек в моей таблице COMP. Это меняет вопрос.
3 ответа
"Я хочу, чтобы пользователь не мог ввести 2013 год более одного раза в столбец моей таблицы COMP".
- открыто
COMP
в представлении дизайна. - Выберите
Year
поле. - Выберите вкладку " Общие " в "Свойствах поля" (внизу).
- Выберите "Да (без дубликатов)" в раскрывающемся списке.
- Сохраните изменения.
Если вы предпочитаете делать это с кодом вместо...
CurrentDb.Execute "ALTER TABLE [COMP]" & vbCrLf & _
"ADD CONSTRAINT uniq_year UNIQUE ([Year])"
Обратите внимание, что утверждение не будет успешным, если не существует [Year]
значения уникальны. Кроме того, оба COMP
а также Year
зарезервированные слова. Заключите их в квадратные скобки, чтобы движок БД распознал их как имена полей и не жаловался.
Если вы решили, что ограничение должно быть основано на 2 полях...
CurrentDb.Execute "ALTER TABLE [COMP]" & vbCrLf & _
"ADD CONSTRAINT uniq_id_year UNIQUE (ID, [Year])"
Вы также можете создать тот же уникальный индекс / ограничение из таблицы Design View, но мне это сложнее описать. Возможно, вам будет проще выполнить инструкцию DDL, а затем проверить результат в режиме конструктора. Просто убедитесь, что таблица не находится в режиме конструктора, когда вы пытаетесь выполнить инструкцию.
Я создал таблицу COMP
с длинными целочисленными полями, ID
а также Year
, Затем выполнил этот оператор как новый запрос в конструкторе запросов:
ALTER TABLE [COMP] ADD CONSTRAINT uniq_id_year UNIQUE (ID, [Year])
Вот снимок экрана с моей таблицей в режиме конструктора после выполнения этого оператора.
Я не понимаю, почему то же самое утверждение не работает для вас. Поэтому откройте таблицу в представлении "Дизайн" и найдите методы пользовательского интерфейса, чтобы создать уникальный индекс, как показано на этом рисунке.
Создайте свой первичный ключ на основе одного (или нескольких) столбцов. Если вам нужно основать его на 2 столбцах, перейдите в представление "Дизайн" таблицы, выделите поля, на которых оно основано, и щелкните правой кнопкой мыши. Выберите "Первичный ключ" во всплывающем меню. Судя по предыдущему комментарию, вам нужно предотвратить дублирование в комбинации ID и Year. Итак, выделите эти 2 строки в режиме конструктора и сделайте их первичным ключом. Это позволит вам не иметь в таблице 2 записи с одинаковыми данными в ID и году.
Убедитесь, что ваш отчет сгруппирован по идентификатору и году, что позволит избежать дублирования.
Вы можете создать уникальный индекс в этом поле
Если вы создаете уникальный индекс, Access не позволяет вам вводить новое значение в поле, если это значение уже существует в том же поле в другой записи. Access автоматически создает уникальный индекс для первичных ключей, но вы также можете запретить повторяющиеся значения в других полях. Например, вы можете создать уникальный индекс для поля, в котором хранятся серийные номера, чтобы ни у двух продуктов не было одинакового серийного номера.