在Access VBA中,如何在删除父记录之前验证它是否有子记录?
我有Access数据库,其中每个表都有许多表和表单。我已经设置了一对多的表关系,并强制父子记录的引用完整性。“我的表单”有一个删除按钮来删除单个记录,该按钮不执行DoCmd.RunCommand accmddeletecord命令。现在,当我试图删除一个有子项的记录时,我得到一个错误3200。在Form_Delete事件中,我当前正在使用一个按摩盒进行验证,以确保用户想要删除记录,如果没有,我将取消删除。我想知道是否有办法检查当前正在尝试删除的记录用户是否有子项,因此将无法删除,并将向我提供错误信息。显然,当父记录被删除时,access会检查相关的子记录,并抛出此错误,而该记录不会被删除。我希望能够检查记录的属性或类似的内容,以查看是否有子项,并且在实际删除它并出现错误之前无法删除,在这种情况下,我希望取消删除。 需要注意的是,我知道我可以在错误发生时处理它,但是我想在实际删除和获取错误之前在Delete事件中执行此检查在Access VBA中,如何在删除父记录之前验证它是否有子记录?,vba,ms-access,Vba,Ms Access,我有Access数据库,其中每个表都有许多表和表单。我已经设置了一对多的表关系,并强制父子记录的引用完整性。“我的表单”有一个删除按钮来删除单个记录,该按钮不执行DoCmd.RunCommand accmddeletecord命令。现在,当我试图删除一个有子项的记录时,我得到一个错误3200。在Form_Delete事件中,我当前正在使用一个按摩盒进行验证,以确保用户想要删除记录,如果没有,我将取消删除。我想知道是否有办法检查当前正在尝试删除的记录用户是否有子项,因此将无法删除,并将向我提供错误
感谢您的帮助,Arthur。最好的方法是迭代关系集合并阅读有关表/外部表的信息 检查EE的这个问题,然后回答:我也有同样的问题。 我写了这个函数 TableName是引用表中的表 MasterFieldName此表的键域。 KeyFieldValue要检查的值 很抱歉我用意大利语说的
Function F_AsChild(TableName As String, MasterFieldName As String, KeyFieldValue As String)
Dim nx As Integer
Dim ny As Integer
Dim Rst As Recordset
Dim Errore As Boolean
Dim Trovato As Boolean
Dim XX As Long
' La routine funziona esclusivamente a patto che la relazione sia di "one-to-many"
XX = 0
Trovato = False
Errore = False
' Conto il mumero di relazioni che ho a disposizione.
' Ciclo sulle Releazioni
For nx = 0 To CurrentDb.Relations.Count - 1
' Nel caso ho trovato il dato esco
If Trovato Then Exit For
' Se mi trovo sulla tabella
If CurrentDb.Relations(nx).Table = TableName Then
For ny = 0 To CurrentDb.Relations(nx).Fields.Count - 1
If MasterFieldName <> CurrentDb.Relations(nx).Fields(ny).Name Then
Errore = True
Trovato = True
Else
XX = XX + DCount(CurrentDb.Relations(nx).Fields(ny).ForeignName, CurrentDb.Relations(nx).ForeignTable, CurrentDb.Relations(nx).Fields(ny).ForeignName + "='" + Trim(KeyFieldValue) + "'")
End If
If Trovato Then Exit For
Next ny
End If
Next
If Errore Then
F_AsChild = -1
Else
F_AsChild = XX
End If
End Function
使用DCount函数Patrick,我认为DCount在我的应用程序中不起作用,因为我需要提前知道所有的表关系以及这些表的名称,以便在每个DCount中使用它,并且在创建新的表关系时,我必须编辑代码来说明这些关系。谢谢。谢谢约翰,这看起来很有希望,我将探索这一点,看看它将如何为我工作。@John有趣的回答。因此,如果你发布了这样一个链接,它会被要求复制或重新骚扰至少内容的重要部分,因此如果链接失效,信息仍然存在。@Patrick不是我的解决方案…我已经指出了关系集合的迭代,但我不能为提供的解决方案负责…如果链接坏了,那么尝试使用它的未来用户将有一个出发点…毕竟EE从90年代起就稳定了,所以很难说链接会坏容易地当SO中的一个问题由于类似的问题/答案而被删除/保留/标记为重复时,情况几乎相同……因为EE很容易变坏,这也适用于SO。