从子表单中删除多个记录

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

【讨论】:

以上是关于从子表单中删除多个记录的主要内容,如果未能解决你的问题,请参考以下文章

主窗体记录更改时从子窗体移动焦点

从子窗体访问去记录

如何从子表单刷新父表单上的数据网格

获取子表单中选定行的ID

SQL Server - 从子-父-子中选择并返回多个结果集

从子记录(或超链接)获取数据以在 netsuite 高级 html pdf 中打印