Ms access 防止Access 2007中的意外数据覆盖
我有一个简单的Access 2007数据库,我在表单中添加了一个按钮,用于切换编辑当前显示记录的功能 默认情况下,我已将AllowEdits、AllowAdditions和AllowDeletes设置为false。单击“编辑模式”按钮可更改此设置 我还添加了几个表单事件,以便在更改显示的记录时,取消编辑模式 我现在发现我无法创建新记录,因为当我单击BtnNew(标准添加新记录宏附件)时,我收到错误“您无法转到指定的记录” 数据库中的VB代码如下所示,有人能看到我做错了什么,或者从哪里开始查找吗?(我缺乏VB/Access知识,但我理解这些概念,因为我是一名C#开发人员)Ms access 防止Access 2007中的意外数据覆盖,ms-access,vba,ms-access-2007,Ms Access,Vba,Ms Access 2007,我有一个简单的Access 2007数据库,我在表单中添加了一个按钮,用于切换编辑当前显示记录的功能 默认情况下,我已将AllowEdits、AllowAdditions和AllowDeletes设置为false。单击“编辑模式”按钮可更改此设置 我还添加了几个表单事件,以便在更改显示的记录时,取消编辑模式 我现在发现我无法创建新记录,因为当我单击BtnNew(标准添加新记录宏附件)时,我收到错误“您无法转到指定的记录” 数据库中的VB代码如下所示,有人能看到我做错了什么,或者从哪里开始查找吗?
我突然意识到,我没有将AllowAdditions设置为True,但我的标签清楚地正确显示了“编辑模式”。您的问题是,当您转到新记录时,Access会通过Form_Current将AllowAdditions设置为false,这使得保留在新记录上无效(基本上)。我不确定这是否是最好的解决方案,但我会设置一个状态变量作为表单级别,然后在选择“新建”按钮时,设置该变量并将表单设置为当前以跳过禁用功能
Enum ValidStates
Locked = 0
Edit = 1
NewRecord = 2
End Enum
Dim formState As ValidStates
然后对于btnNew,使用[事件过程]
Private Sub btnNew_Click()
On Error GoTo Err_btnNew_Click
formState = NewRecord
DoCmd.GotoRecord , , acNewRec
Exit Sub
Err_btnNew_Click:
MsgBox Err.Description
End Sub
在当前事件的形式中,添加以下内容:
Private Sub Form_Current()
If formState <> NewRecord Then Disable
formState = Edit
End Sub
用户在单击“新建”之前是否必须单击“编辑模式”?我可能会用Btnew编写自己的代码(与宏或向导代码相反),这样当用户单击Btnew时,您可以测试AllowEditions属性是否为true。非常感谢,在阅读您的回复后,我修改了我的代码如下:
Private Sub Form_Current()如果RecordStatusEnum.dbRecordNew=False,则禁用End If End Sub
,这基本上解决了问题(但并不完美)
Private Sub Form_Current()
If formState <> NewRecord Then Disable
formState = Edit
End Sub
formState = Locked ' for Disable
formState = Edit ' for Enable