【问题标题】:Deleting a record in form's recordsource without then triggering the form's current event删除表单记录源中的记录而不触发表单的当前事件
【发布时间】:2015-12-08 04:39:48
【问题描述】:

我正在使用表单的 Current 事件从其 OpenArgs 属性中提取数据,以便为当前记录预填充一些空字段。

当前事件 VBA 如下图所示(pullData 子将这些新数据带入当前记录):

Private Sub Form_Current()

    If _
        SplitOpenArg(6) = "NewAssessment" _
    Then        
        pullData
        EditMode
    Else
        ViewMode
    End If

End Sub

在表单的其他地方,我有一个命令按钮,它分支到用户删除/丢弃表单上显示的当前记录的选项:

Dim db As DAO.Database
Dim sql As String

Set db = CurrentDb    
sql = "DELETE * FROM myTable WHERE ID='" & Me.ID & "'"    
db.Execute sql

Set db = Nothing

DoCmd.Close acForm, "myForm"

当以这种方式删除记录时,似乎触发了表单的 Current 事件......我想这是设计使然;如果当前记录已被删除,则访问将移至另一条记录。

不幸的是,这意味着 pullData 子程序再次运行,因此部分重新创建了用户试图删除的记录。

我试过DoCmd.RunCommand acCmdDeleteRecord,但这会导致同样的问题。

是否可以在不触发表单当前事件的情况下从表单的记录源中删除记录?

我可能会关闭表单并删除与表单分开的模块中的记录,但如果可以从表单模块本身实现这一点,我会很感兴趣。

【问题讨论】:

    标签: ms-access vba ms-access-2007 ms-access-2010 ms-access-2013


    【解决方案1】:

    [1] 为表单创建一个私有布尔变量。

    Option Compare Database
    Option Explicit
    Dim bUserDeleted As Boolean 'put this in the form's main code
    

    默认值已经设置为 false,但您可以根据需要在 OnLoad() 事件中将 var 设置为 false

    [2] 在删除命令按钮代码中的记录之前,将变量设置为 True。

    Dim db As DAO.Database
    Dim sql As String
    
    bUserDeleted = True 'set it to true so oncurrent and/or on unload can check it
    
    Set db = CurrentDb    
    sql = "DELETE * FROM myTable WHERE ID='" & Me.ID & "'"    
    db.Execute sql
    
    Set db = Nothing
    
    DoCmd.Close acForm, "myForm"
    

    [3] 如果 bUserDeleted 为 True,则跳出或 Sub(s)

    Private Sub Form_Current()
    
       if bUserDeleted = True then exit Sub 'add this to jump out cleanly
    
        If _
            SplitOpenArg(6) = "NewAssessment" _
        Then        
            pullData
            EditMode
        Else
            ViewMode
        End If
    
    End Sub
    

    【讨论】:

    • 一个简单的解决方法 - 正是我今天遇到的问题 :) 谢谢!
    【解决方案2】:

    我认为您无法使用这种方法 - 删除绑定表单中的当前记录将触发移动到另一条记录并触发 Current 事件。

    设置您的表单,以便没有绑定任何字段。当表单加载时,从数据库中获取数据并填充字段。如果用户随后决定删除此记录,则您可以控制删除它并根据需要加载另一条记录。

    【讨论】:

      【解决方案3】:

      您可以将删除代码移至表单的 Unload 事件,只将关闭命令留给您的按钮。

      【讨论】:

      • 这不是一个坏主意,尽管我不想在每次尝试关闭记录时都删除记录...不知道如何告诉事件Form_Unload 何时删除以及何时不删除;我没有实际键入对该事件的调用,也没有声明任何允许我传入变量的参数。
      猜你喜欢
      • 1970-01-01
      • 2019-11-07
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多