访问vba:为什么form_delete sub运行两次

时间:2015-04-22 13:39:35

标签: vba access-vba subform msgbox

我使用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会运行两次?

任何想法,请

1 个答案:

答案 0 :(得分:0)

Nayomi,

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

当用户按下Del键时,您还可以使用Form_KeyDown事件来调用代码。