我有一个连接表,它包含2个表中的FK。这两个字段是为复合唯一键索引设置的,我需要检查DlookUp的重复项,如果可能的话。这是我试过的:
Nz(DLookup("PK_JoinTable", "JoinTable", "FK_FirstTable = " & Me.FK_FirstTable & "AND FK_SecondTable= " & Me.FK_SecondTable & _
" AND PK_JoinTable <> " & Nz(Me.PK_JoinTable, 0)), 0)
在这种情况下可以使用DLookUp吗?
编辑:这是我的表设计......JoinTable
PK_JoinTable
FK_FirstTable
FK_SecondTable
这些外键表字段具有唯一索引。我有一个表单,我输入通过Combobox连接两个表的数据。我需要防止重复条目。在Before_Update事件和&#34; Save&#34;的Click事件中都有。按钮。这是我现在的整个代码(click_event of button):
Dim Duplicates As Long
Duplicates = Nz(DLookup("PK_JoinTable", "JoinTable", "FK_FirstTable = " & Me.FK_FirstTable & "AND FK_SecondTable= " & Me.FK_SecondTable & _
" AND PK_JoinTable <> " & Nz(Me.PK_JoinTable, 0)), 0)
If Duplicates > 0 Then
Cancel = True
MsgBox "Duplicate entry. This record will not be saved !, vbCritical
DoCmd.RunCommand acCmdUndo
Exit Sub
Else
' nothing
End If
答案 0 :(得分:1)
在您的评论中做出解释之后,是的,可以使用Dlookup
执行此操作,但是您的错误很少,在AND FK_SecondTable
之前错过了一个空格:
Nz(DLookup("PK_JoinTable", "JoinTable", "FK_FirstTable = " & Me.FK_FirstTable & " AND FK_SecondTable= " & Me.FK_SecondTable & _
" AND PK_JoinTable <> " & Nz(Me.PK_JoinTable, 0)), 0)
您也可以尝试使用与Dlookup
实现相同功能的方法,但IMO更清晰,如果您的查询变得更复杂,并且更容易调试和调整,则提供更多可能性。
Dim RST As Recordset
Dim strSQL as string
strSQL = "SELECT DISTINCT(Attribute) FROM Table_Setting WHERE Attribute NOT IN (SELECT Attribute FROM Table_Setting WHERE BookType='" & strBookType & "')"
Set RST = CurrentDb.OpenRecordset(strSQL)
If Not RST.BOF Then
' Looks like we have duplicates
RST.Close
Set RS = Nothing
Cancel = True
MsgBox "Duplicate entry. This record will not be saved !", vbCritical
DoCmd.RunCommand acCmdUndo
Exit Sub
End If
答案 1 :(得分:1)
要调试DLookup调用,请在单独的字符串中构造WHERE部分,然后Debug.Print
(Ctrl + G打开立即窗口)。
strSql = "FK_FirstTable = " & Me.FK_FirstTable & _
"AND FK_SecondTable= " & Me.FK_SecondTable & _
" AND PK_JoinTable <> " & Nz(Me.PK_JoinTable, 0)
Debug.Print strSql
Duplicates = Nz(DLookup("PK_JoinTable", "JoinTable", strSql), 0)
您会发现自己错过了Me.FK_FirstTable
和AND
之间的空格。
答案 2 :(得分:0)
您应该在查询中将这些表指向一起,并在需要时对查询执行dlookup。如果您特别需要复合键,则可以在别名列下连接所需的列。
总而言之,这可能是一个更容易实现总体目标的方法,但是你的细节很短......所以我只回答了什么 提供了。
使用您更新的问题...避免重复的简单方法是根据三列创建唯一索引。
答案 3 :(得分:0)
当数据库与Dlookup一起使用时,调试会非常复杂,我建议使用哪里函数非常重要,以及尝试使用外键以及删除ur数据库中的复杂性。如果它很大那么。