访问 - 使用 DLookup 来防止跨两个表的重复条目只会阻止输入最高值

Access - Using DLookup to prevent duplicate entries across two tables only prevents entry of top value

这里是新手 - 相当高级 excel 用户现在正在尝试掌握 Access。

我正在基于一个链接 table 为学校数据构建一个数据库,其中包含由另一个团队管理的大部分学校信息(联系数据链接)和一个 table 用于附加行我需要的(其他联系数据)。使用 AutoExec(UNION 查询后跟创建 table)附加两个 table 以提供完整列表 (AllSchoolsData)。

附加行 table 将由用户通过表单更新,我想防止他们能够复制其中一个字段 (DfE),以便它在 AllSchoolsData 中保持唯一。

我一直在尝试使用 DLookup 并取得了进展:

Private Sub Form_BeforeUpdate(Cancel As Integer)

Dim NewDfE As Variant
Dim stLinkCriteria As Variant

NewDfE = Me.DfE.Value
stLinkCriteria = [DfE] = NewDfE
If Me.DfE = DLookup("[DfE]", "[Contact Data Linked]", stLinkCriteria) Then
    MsgBox "This DfE number has already been allocated." _
        & vbCr & vbCr & "Please enter a unique DfE number.", vbInformation, "Duplicate DfE Number"
Me.Undo
End If
End Sub

这似乎非常适用于 "Contact Data Linked" 顶部列出的记录,但不会阻止任何其他 DfE 编号的输入。

该代码基于我在 youtube 教程中找到的解决方案 https://www.youtube.com/watch?v=XXLXo4As61Y and in a few forums e.g. https://www.experts-exchange.com/questions/21522439/Dlookup-to-prevent-duplicate-entries.html

如有任何建议,我们将不胜感激!

您将 stLinkCriteria 设置为布尔值,即 DfENewDFE 的结果比较。你应该将它设置为比较两者的字符串,让数据库引擎处理比较

stLinkCriteria = "[DfE] = " & NewDfE 'If [DfE] is numeric

stLinkCriteria = "[DfE] = '" & NewDfE & "'" 'If [DfE] is a string

或者,更好的是,在 DLookUp:

中使用参数
Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim stLinkCriteria As Variant

    TempVars!NewDFE= Me.DfE.Value
    If Me.DfE = DLookup("[DfE]", "[Contact Data Linked]", "DfE = TempVars!NewDfE") Then
        MsgBox "This DfE number has already been allocated." _
            & vbCr & vbCr & "Please enter a unique DfE number.", vbInformation, "Duplicate DfE Number"
        Cancel = True
    End If
    TempVars.Remove "NewDfE"
End Sub

进一步的建议是:使用 Cancel = True 而不是 Me.UndoMe.Undo 回滚所有更改,而 Cancel = True 仅使您无法提交更新(允许人们修复错误,然后保存更改)。