我使用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会运行两次?
任何想法,请
答案 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
事件来调用代码。