Избегайте дублирования записей с событием таблицы BeforeChange - PullRequest
0 голосов
/ 05 октября 2019

У меня есть ситуация в базе данных MS Access, я должен предотвратить дублирование записей на основе комбинации трех атрибутов:

  • StudentNumber
  • ColleagueID
  • TypeOfAttending

Итак, для одной комбинации (StudentNumber & ColleagueID) у меня есть три типа посещения: A, B и C.

Вот пример:

+---------------+-------------+---------------+
| StudentNumber | ColleagueID | AttendingType |
+---------------+-------------+---------------+
|           100 |          10 | A             |
|           100 |          10 | B             |
|           100 |          10 | C             |
|           100 |          11 | A             |
|           100 |          11 | B             |
|           100 |          11 | C             |
|           100 |          11 | C             |
+---------------+-------------+---------------+

Так что последняя строка не будет приемлемой.

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 05 октября 2019

Как уже отмечалось, вы можете выбрать все 3 в качестве ПК. Или вы можете даже создать уникальный индекс для всех 3 столбцов. Таким образом, эти две идеи свободны от кода.

И последнее, но менее важное: вы можете использовать макрос До изменения и выполнить поиск (поиск) в таблице, чтобы проверить, существует ли существующая запись. До сих пор, учитывая вашу информацию, вероятно, уникальный индекс является наименьшим усилием и не требует, чтобы вы изменили PK на все 3 столбца (что, как отмечалось, является другим решением).

Итак, вы могли бы рассмотретьмакрос перед изменением. И используйте это:

Lookup a Record in MyTable
   Where Condition = [z].[Field1]=[MyTable].[Field1] And 
                     [z].[Field2]=[MyTable].[Field2] And 
                     [z].[ID]<>[MyTable].[ID]
   Alias Z
   RaiseError   -123
   Error Description: There are other rows with this data

Таким образом, вы можете использовать макрос данных, используйте макрос таблицы до изменения. Убедитесь, что у вас есть код ошибки повышения с отступом «внутри» кода поиска. И обратите внимание, как мы используем псевдоним для поиска, поскольку имя таблицы (MyTable) уже находится в контексте и уже является текущей строкой данных, поэтому мы ищем, используя «z» в качестве псевдонима, чтобы различать текущую строку,и запись поиска.

Итак, с точки зрения обучения, можно использовать приведенный выше макрос таблицы, но он, вероятно, потребует меньше усилий и усилий для простой установки уникального индекса по всем 3 столбцам.

...