使用 BeforeChange Table 事件避免重复记录
Avoid Duplicate Records with BeforeChange Table Event
我在 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 |
+---------------+-------------+---------------+
所以最后一行是不可接受的。
有人知道吗?
如前所述,您可以选择所有 3 个作为 PK。或者您甚至可以在所有 3 列上创建唯一索引。这两个想法因此是无代码的。
最后但最不重要的一点是,您可以使用更改前宏,并在 table 中进行搜索(查找)以检查现有记录是否存在。到目前为止,根据您的信息,唯一索引可能是最省力的,并且不需要您将 PK 更改为所有 3 列(如前所述,这是另一种解决方案)。
所以,你可以考虑一个before change宏。并使用这个:
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
因此,您可以使用数据宏,使用更改前的 table 宏。确保您将查找代码的引发错误代码缩进 "inside"。并注意我们如何使用别名进行查找,因为 table 名称 (MyTable) 已经在上下文中,并且已经是当前数据行,所以我们使用 "z" 作为别名进行查找区分当前行和查找记录的行。
因此,从学习的角度来看,可以使用上面的 table 宏,但是简单地在所有 3 列上设置唯一索引可能会减少工作量和精力。
我在 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 |
+---------------+-------------+---------------+
所以最后一行是不可接受的。
有人知道吗?
如前所述,您可以选择所有 3 个作为 PK。或者您甚至可以在所有 3 列上创建唯一索引。这两个想法因此是无代码的。
最后但最不重要的一点是,您可以使用更改前宏,并在 table 中进行搜索(查找)以检查现有记录是否存在。到目前为止,根据您的信息,唯一索引可能是最省力的,并且不需要您将 PK 更改为所有 3 列(如前所述,这是另一种解决方案)。
所以,你可以考虑一个before change宏。并使用这个:
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
因此,您可以使用数据宏,使用更改前的 table 宏。确保您将查找代码的引发错误代码缩进 "inside"。并注意我们如何使用别名进行查找,因为 table 名称 (MyTable) 已经在上下文中,并且已经是当前数据行,所以我们使用 "z" 作为别名进行查找区分当前行和查找记录的行。
因此,从学习的角度来看,可以使用上面的 table 宏,但是简单地在所有 3 列上设置唯一索引可能会减少工作量和精力。