我正在使用表单的当前事件从其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
,但这会导致同样的问题。
是否可以从表单的记录源中删除记录,而不会触发表单的当前事件?
我可能会关闭表单并删除与表单分开的模块中的记录,但如果可以从表单模块本身实现,则会感兴趣。
答案 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