在Access VBA中,如何在删除父记录之前验证父记录是否有子记录?



我有 Access 数据库,每个表都有许多表和表单。 我已经设置了表关系(一对多(并为父子记录强制实施引用完整性。 我的窗体有一个删除按钮来删除单个记录,该按钮执行DoCmd.RunCommand acCmdDeleteRecord命令。 现在,当我尝试删除具有子项的记录时,出现错误 3200。 Form_Delete,我目前正在使用按摩盒进行验证,以确保用户要删除记录,如果否,我取消删除。 我想知道是否有办法检查当前记录用户是否正在尝试删除有孩子,因此无法删除并会给我错误。 显然,当删除父记录并引发此错误并且记录未被删除时,访问会检查相关的子记录。 我希望能够检查记录的属性或类似的东西,以查看是否有子项并且在实际删除它并收到错误之前无法删除,在这种情况下,我想取消该删除。 请注意,我知道我可以在错误发生时处理错误,但我想在实际删除并收到错误之前在 Delete 事件中进行此检查。

谢谢你的帮助,亚瑟。

最好的方法是迭代关系集合并阅读有关表/外部表的信息 检查EE的这个问题和答案:https://www.experts-exchange.com/questions/27266600/Access-VBA-getting-table-relationships.html

我遇到了同样的问题。 我写了这个函数.....

表名是引用表中的表 主字段命名此表的键字段。 键字段值 要检查的值。

很抱歉我的意大利语评论。

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

最新更新