【问题标题】:access vba: why form_delete sub runs twice times访问 vba:为什么 form_delete sub 运行两次
【发布时间】:2025-12-05 12:25:01
【问题描述】:

我使用 Access 97。

我有一个附加到父表单的子表单。 父表单基于数据库表,子表单基于选择查询:选择属于组的办公室。

我会允许用户从他的组中拉出一个办公室,所以我考虑使用删除按钮并使用事件删除如下:

Private Sub Form_Delete(Cancel As Integer)

If MsgBox("are you sure?", vbYesNo, "MsgBox") = vbYes Then
   Call buro_delete
Else
    Cancel = True
End If

End Sub

Office 和他的组通过外键链接。 办公室不会物理删除,但我们会将外键列置为空。

buro_delete

Private Sub buro_delete()
Dim l_adoConn As New ADODB.Connection
Dim l_adoCmd As New ADODB.Command
Dim l_ID As Long
Dim l_Sql As String

 l_adoConn.CommandTimeout = g_CmdTimeOut
 l_adoConn.Open (Allgemein.g_ADOConnStr)
 Set l_adoCmd.ActiveConnection = l_adoConn
 l_adoCmd.CommandType = adCmdText
 l_adoCmd.CommandTimeout = g_CmdTimeOut
 l_ID = Me.BTE_NR
 l_Sql = "Update BUEROS Set KL_KETTE_ID=null Where BTE_NR=" & l_ID
 l_adoCmd.CommandText = l_Sql
 l_adoCmd.Execute
End Sub

在程序运行时,当我单击子表单中任何列上的删除按钮时,第一次显示 msgbox 并接受我的回答(是或否),然后第二次出现。

我打断点调试,看到系统运行form_delete sub,调用buro_delete sub,然后在buro_delete sub开头返回,第二次运行完毕。

为什么 form_delete sub 运行两次?

有什么建议

【问题讨论】:

  • 你已经问过这个问题了吗?无论如何,你能分享你的用户、组和办公室的表定义吗?我感觉您的数据库设计不正确。此外 Form_delete 将触发选择删除记录的次数。 From_onbeforedelete 只会触发一次
  • 这个问题之前有人问过,然后这个问题被作者删掉了。是*.com/questions/29557179/…
  • 我再次提出问题寻找解决方案

标签: ms-access vba msgbox subform


【解决方案1】:

奈绪美,

Form_Delete() 不是你应该在这里使用的。查看您的 Private Sub buro_delete() 代码,您正在更新基础数据以删除外键。你没有删除任何东西。

改为使用“删除”命令按钮,并将您的事件代码移到那里:

' your command button
Private Sub cmdDeleteForeignKey)
   If MsgBox("are you sure?", vbYesNo, "MsgBox") = vbYes Then
      Call buro_delete
      Me.Requery
   End If
End Sub

您也可以使用Form_KeyDown事件在用户按下Del键时调用代码。

【讨论】:

    最近更新 更多