Есть ли способ создать ограничение в столбце таблицы, чтобы предотвратить повторяющиеся записи?

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

Причина в том, что у меня заработная плата за несколько лет, которую можно вводить любое количество раз.

Например,

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".

  1. открыто COMP в представлении дизайна.
  2. Выберите Year поле.
  3. Выберите вкладку " Общие " в "Свойствах поля" (внизу).
  4. Выберите "Да (без дубликатов)" в раскрывающемся списке.
  5. Сохраните изменения.

Если вы предпочитаете делать это с кодом вместо...

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

Другие вопросы по тегам