访问 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 抛出子或函数?

excel用VBA连接数据库为啥我的程序错误呢?新手上路,求各位前辈指点!

VBA编程14.操作工作簿对象

VBA:为啥打开随机语句失败?

多参数 subs vba

是否可以将私有子合并到 VBA 访问中的函数中?