访问 vba:为啥 form_delete sub 运行两次
Posted
技术标签:
【中文标题】访问 vba:为啥 form_delete sub 运行两次【英文标题】:access vba: why form_delete sub runs twice times访问 vba:为什么 form_delete sub 运行两次 【发布时间】:2015-04-22 13:39:34 【问题描述】:我使用 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/… 我再次提出问题寻找解决方案 【参考方案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键时调用代码。
【讨论】:
以上是关于访问 vba:为啥 form_delete sub 运行两次的主要内容,如果未能解决你的问题,请参考以下文章
为啥在尝试读取记录集字段时未定义访问 vba 抛出子或函数?