MS Access vba保存按钮错误3021

由于各种原因,我想在我的表单上设置一个自定义按钮以保存当前记录。我使用一个导航表单,并希望在保存条目时触发相同的过程(完整性检查,用户输入等),从而每当用户按下“保存”按钮或切换到另一个表单时。用户将被有条件地要求确认该过程并因此能够取消它。MS Access vba保存按钮错误3021

一切都与一个非常奇怪和愤怒异常顺利运行:每当我点击“更新前”事件中节省一个新记录按钮和提示信息,我收到

RTE 3021( “没有当前记录”)

没有MsgBox,一切都很好。更奇怪的是: 当我通过使用导航窗体切换到另一个窗体来触发保存过程(或者只需按下“外部”用于数据输入的窗体)时,一切都很好。

这里是一个简约例子(与DoCmd.Save,重新查询或acCmdSaveRecord相似的结果):

Private Sub vt_save_Click() 

Me.Dirty = False

End Sub

Private Form_BeforeUpdate(Cancel As Integer)

Cancel = True

MsgBox "Test"

End Sub

任何想法?我根本无法绕过那个错误。

回答:

最直接和合理的解决方案是使用错误处理程序 - 这是我顽固地忽略的。

Private Sub save_Click() 

On Error GoTo Err_Handler

Me.Dirty = False

Exit_Here:

Exit Sub

Err_Handler:

If Err.Number = 2101 Then

'ignore or message

Else

MsgBox Err.Description

End If

Resume Exit_Here

End Sub

回答:

你也许可以尝试在检查记录是否存在的同时使用表单中的值运行查询。

桌子上是否有主键?如果是这样,主键将成为您的焦点。

Private Sub vt_Save_Click() 

dim rst as DAO>Recordset

Dim strSQL as String

Dim strID as string

strID = me.YourPrimaryKeyField

strSQL = "SELECT * " & _

"FROM YourTableName " & _

"WHERE (((YourTableName.YourFieldName) =" & me.PrimaryKeyField & "));"

set rst = currentdb.openrecordset(strsql)

if rst.recordcount = 0 then

currentdb.execute "INSERT INTO YourTableName (List All Fields to Add) " & _

"SELECT List All Field controls with values to add;"

End IF

'Anything else you want the code to do from here

EndCode:

If not rst is nothing then

rst.close

set rst = nothing

End IF

End Sub

对Form_LostFocus()事件重复此过程。如果您想使它更容易,请将此代码作为模块并在窗体上的两个事件触发器中调用。

如果这不起作用,请让我知道,我会很乐意进一步协助。

以上是 MS Access vba保存按钮错误3021 的全部内容, 来源链接: utcz.com/qa/264277.html

回到顶部