从子表单中删除多个记录
Posted
技术标签:
【中文标题】从子表单中删除多个记录【英文标题】:Deleting more than one record from a subform 【发布时间】:2019-10-08 02:08:12 【问题描述】:我有一个按钮后面的代码,可以从子表单中删除记录。当我第一次打开父表单时,该代码有效。如果我选择要删除的另一条记录,它将不再起作用。我必须关闭表单并重新打开,它只能工作一次。
我尝试注释掉其他过程中的所有其他代码以隔离问题(例如 Form_Open),但未能找到导致问题的原因。
代码:
Dim LResponse As Integer
LResponse = MsgBox("Do you wish to Delete this local Vendor?", vbYesNo, "Delete Local Vendor")
If LResponse = vbYes Then
Me.VendorPrograms_subform.Form.Recordset.Delete
Me.VendorPrograms_subform.Form.Recordset.MoveNext
Else
DoCmd.CancelEvent
End If
我也试过 SQL:
Dim sSQL As String
sSQL = "DELETE * FROM VendorPrograms WHERE VendorId# = " & "Me!VENDOR#"
DoCmd.RunSQL sSQL
Me!VendorPrograms_subform.Requery
这段代码没有报错,但是记录没有被删除。
【问题讨论】:
您确定记录已从表中删除吗?删除 Recordset 不应该删除记录,它应该只是解除表单与数据的关联。如果按钮在主窗体上,则建议您运行 DELETE sql 操作,然后重新查询子窗体。如果您删除供应商,是否还有必须删除的相关记录? 是的,第一次从子表单中删除记录。没有其他依赖记录需要删除。我尝试了一个 sql 删除操作,但也遇到了问题。我将恢复该代码以查看是否可以解决问题。感谢您的帮助。我将立即返回我发现的 SQL 发生的情况。 我什至从未见过 Recordset.Delete。编辑问题以显示其他尝试的代码并解释错误 - 什么消息。 所以 SQL 代码是: Dim sSQL As String Dim MyID As String MyID = Me![VendorId#] sSQL = "DELETE * FROM VendorPrograms WHERE [VendorId#] = " & MyID DoCmd.RunSQL sSQL Me!VendorPrograms_subform.Requery 这几乎可以工作,但是它会打开一个参数查询窗口,如果我输入 ID#,它实际上会删除该子记录。我当然不希望它询问 ID# 我希望它从表单中获取它。 听起来这可能是 me.requery 问题 【参考方案1】:问题最终是表单和子表单下的查询。我不得不将两者都简化为只包含主表单的主表和子表单的子表。
过去,如果我没记错的话,如果查询包含多个表,我就无法在表单中输入数据。这已经改变,现在查询中的多个表将用于数据输入,但似乎部分不允许从子表单中删除记录(我能够在打开表单后删除一条记录,但进一步删除不起作用)如果多个表在查询中使用。
这是有效的代码:
Dim LResponse As Integer
LResponse = MsgBox("Do you wish to Delete this local Vendor?", vbYesNo, "Delete Local Vendor")
If LResponse = vbYes Then
Me![VendorPrograms subform1].Form![VendorId#].SetFocus
Me.[VendorPrograms subform1].Form.Recordset.Delete
Me.[VendorPrograms subform1].Form.Recordset.MoveNext
Me.Requery
Else
DoCmd.CancelEvent
End If
【讨论】:
以上是关于从子表单中删除多个记录的主要内容,如果未能解决你的问题,请参考以下文章