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

时间:2011-10-25 15:05:03

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

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

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

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

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

我在数据库中的VB代码如下,任何人都可以看到我做错了什么,或者从哪里开始寻找? (我的VB / Access知识缺乏,但我理解这些概念,因为我是C#开发人员。)

Private Sub BtnEdit_Click()
    If lblEditMode.Caption = "Edit Mode" Then
        Disable
    Else
       Enable
    End If
End Sub

Private Sub Form_AfterDelConfirm(Status As Integer)
    Disable
End Sub

Private Sub Form_Current()
    Disable
End Sub

Private Sub Disable()
    AllowEdits = False
    AllowAdditions = False
    AllowDeletions = False
    BtnNew.Enabled = False
    BtnDelete.Enabled = False
    lblEditMode.Caption = ""
End Sub

Private Sub Enable()
    AllowEdits = True
    AllowAdditions = True
    AllowDeletions = True
    BtnNew.Enabled = True
    BtnDelete.Enabled = True
    lblEditMode.Caption = "Edit Mode"
End Sub

令我感到震惊的是,我在某种程度上没有将AllowAdditions设置为True,但我的标签清楚地正确显示了“编辑模式”。

1 个答案:

答案 0 :(得分:1)

您的问题是,当您转到新记录时,Access会通过Form_Current将AllowAdditions设置为false,这会使新记录保持无效(基本上)。我不确定这是最好的解决方案,但我会设置一个状态变量作为表单级别,然后当选择新按钮时,设置该变量并设置Form_Current跳过禁用功能。

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

在Form_Current事件中,添加:

Private Sub Form_Current()
    If formState <> NewRecord Then Disable
    formState = Edit
End Sub

这将允许您编辑新记录。您的启用和禁用功能也会添加一行来设置正确的表单状态:

formState = Locked ' for Disable
formState = Edit ' for Enable