通过VBA在数据表视图中添加记录时防止重复记录

时间:2018-08-07 19:32:49

标签: vba ms-access access-vba ms-access-2016

免责声明:我是一个非常新的访问者

我在Access 2016中建立了一个数据表表单,该表单显示来自多个表的数据。目的是具有类似于Excel的数据可视化表示和数据输入功能,以便用户实际使用数据库。到目前为止,一切进展顺利,除了添加新记录时,它总是向每个表添加新记录,即使它是重复记录也是如此。我了解这是由于表单的设计方式所致。我的问题是:我可以获取新记录以避免通过VBA在表中重复输入吗,而不是更改表单的设计?

到目前为止,我目前的尝试是:

编辑 为清楚起见,这是一种尝试,允许用户以引用“公司联系人”表中现有记录的形式添加记录。索引确实可以防止重复,但也可以防止将子记录添加到“公司联系”表中的条目中。

1)在表(公司联系人)中创建重复的表中创建一个索引,该索引设置为unique = true。索引是四个字段的组合

2)在BeforeUpdate事件上调用一个函数

3)函数然后以构成我的索引的形式获取新记录控件的值,在公司联系表中搜索重复记录并更改相应的外键和新记录的键值

4)不幸的是,这不起作用。我仍然收到一条消息,说我违反了索引的唯一设置。

Option Compare Database
Option Explicit

Public Function PreventDuplicate(index1 As String, index2 As String, index3 
As String, index4 As String) As Variant
Dim rstSource As Recordset, dbsSource As Database

'open company contact tbl & sets index
Set dbsSource = CurrentDb
Set rstSource = dbsSource.OpenRecordset("Company Contact", dbOpenTable)
rstSource.index = "CompanyIndex"

'sets current record to original
rstSource.Seek "=", index1, index2, index3, index4

'sets new record id to match and prevent duplicate
Forms!Master_Form![Main_Form]![Company Contact.ID] = rstSource!ID
Forms!Master_Form![Main_Form]![Contact Name.Company Contact FK] = rstSource!ID

End Function

数据库关系图的图像 Database Relationship

0 个答案:

没有答案