0

我在 MS Access 数据库中有一种情况,我必须根据三个属性的组合来防止重复记录:

  • StudentNumber
  • ColleagueID
  • TypeOfAttending

因此,对于一种组合 ( StudentNumber& ColleagueID),我有三种类型的参加ABC

这是一个例子:

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

所以最后一行是不可接受的。

有谁有想法吗?

4

1 回答 1

0

如前所述,您可以选择所有 3 个作为 PK。或者您甚至可以在所有 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 列上简单地设置唯一索引可能会减少工作量和精力。

于 2019-10-05T18:27:26.693 回答