删除表单记录源中的记录,然后触发表单的当前事件

时间:2015-09-11 15:01:01

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

我正在使用表单的当前事件从其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"

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

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

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

是否可以从表单的记录源中删除记录,而不会触发表单的当前事件?

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

3 个答案:

答案 0 :(得分:0)

我认为你无法使用这种方法 - 以绑定形式删除当前记录将触发移动到另一条记录并触发当前事件。

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

答案 1 :(得分:0)

您可以将删除代码移动到表单的Unload事件,只需将close命令留给您的按钮。

答案 2 :(得分:0)

[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