Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 防止Access 2007中的意外数据覆盖_Ms Access_Vba_Ms Access 2007 - Fatal编程技术网

Ms access 防止Access 2007中的意外数据覆盖

Ms access 防止Access 2007中的意外数据覆盖,ms-access,vba,ms-access-2007,Ms Access,Vba,Ms Access 2007,我有一个简单的Access 2007数据库,我在表单中添加了一个按钮,用于切换编辑当前显示记录的功能 默认情况下,我已将AllowEdits、AllowAdditions和AllowDeletes设置为false。单击“编辑模式”按钮可更改此设置 我还添加了几个表单事件,以便在更改显示的记录时,取消编辑模式 我现在发现我无法创建新记录,因为当我单击BtnNew(标准添加新记录宏附件)时,我收到错误“您无法转到指定的记录” 数据库中的VB代码如下所示,有人能看到我做错了什么,或者从哪里开始查找吗?

我有一个简单的Access 2007数据库,我在表单中添加了一个按钮,用于切换编辑当前显示记录的功能

默认情况下,我已将AllowEdits、AllowAdditions和AllowDeletes设置为false。单击“编辑模式”按钮可更改此设置

我还添加了几个表单事件,以便在更改显示的记录时,取消编辑模式

我现在发现我无法创建新记录,因为当我单击BtnNew(标准添加新记录宏附件)时,我收到错误“您无法转到指定的记录”

数据库中的VB代码如下所示,有人能看到我做错了什么,或者从哪里开始查找吗?(我缺乏VB/Access知识,但我理解这些概念,因为我是一名C#开发人员)


我突然意识到,我没有将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