我有一个简单的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,但我的标签清楚地正确显示了“编辑模式”。
答案 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