"Add Record" 在第一次使用 Access 后得到 "Can't go to specified record"

"Add Record" gives "Can't go to specified record" after first use Access

我在表单中有一个命令按钮,允许用户添加新记录。该命令仅在您在打开表单后第一次单击它时起作用。我可以毫无错误地浏览记录,并且在打开表单后第一次添加记录时不会出现错误。一旦您尝试添加第二条记录,就会显示 "Can't go to the specified record" 错误消息。

我可以毫无问题地在查询中进行编辑,也可以毫无问题地进行编辑。如果我关闭表格并重新打开它,我可以毫无问题地添加新记录。有人有想法吗?

使用VBA,这是标准的添加新代码,没有别的。在下面发布了此表单的所有代码。列出的一些命令按钮在宏中,不知道这是否有所不同。

Private Sub add_Click()
  DoCmd.GoToRecord , , acNewRec
End Sub

Private Sub edit_info_Click()
    Date_of_Echo.Locked = False
    ID.Locked = False
    AoV.Locked = False
    AI.Locked = False
    MR.Locked = False
    TR.Locked = False
    TR_velocity.Locked = False
    PA_pressures.Locked = False
    LVeDD.Locked = False
    LVeSD.Locked = False
    RV_function.Locked = False
    comments.Locked = False
    Me.next.Visible = False
    Me.previous.Visible = False
    Me.first.Visible = False
    Me.last.Visible = False
    Me.add.Visible = False
    Me.save.Visible = True
    Me.save.SetFocus
    Me.edit_info.Visible = False

End Sub

Private Sub Form_Current()
   If Me.NewRecord Then
    Me.recordcounter.Caption = "New Record"
    Me.next.Visible = False
    Me.previous.Visible = False
    Me.first.Visible = False
    Me.last.Visible = False
    Me.add.Visible = False
    Me.edit_info.Visible = False
    Me.save.Visible = True
    Date_of_Echo.Locked = False
    ID.Locked = False
    AoV.Locked = False
    AI.Locked = False
    MR.Locked = False
    TR.Locked = False
    TR_velocity.Locked = False
    PA_pressures.Locked = False
    LVeDD.Locked = False
    LVeSD.Locked = False
    RV_function.Locked = False
    comments.Locked = False
   Else
    Me.recordcounter.Caption = "Record " & Me.CurrentRecord & " of " & Me.Recordset.RecordCount
    Me.next.Visible = True
    Me.previous.Visible = True
    Me.first.Visible = True
    Me.last.Visible = True
    Me.add.Visible = True
    Me.edit_info.Visible = True
    Me.save.Visible = False
    End If
 End Sub
Private Sub save_Click()
DoCmd.save
    Me.previous.Visible = True
    Me.first.Visible = True
    Me.last.Visible = True
    Me.next.Visible = True
    Me.add.Visible = True
    Me.edit_info.Visible = True
    Me.recordcounter.Caption = "Record " & Me.CurrentRecord & " of " & Me.Recordset.RecordCount
    Me.add.SetFocus
    Me.save.Visible = False
    Date_of_Echo.Locked = True
    ID.Locked = True
    AoV.Locked = True
    AI.Locked = True
    MR.Locked = True
    TR.Locked = True
    TR_velocity.Locked = True
    PA_pressures.Locked = True
    LVeDD.Locked = True
    LVeSD.Locked = True
    RV_function.Locked = True
    comments.Locked = True

End Sub
Private Sub next_Click()
    On Error GoTo Err_cmdLastRecord_Click

    Me.AllowAdditions = False
    DoCmd.GoToRecord , , acNext

Exit_cmdLastRecord_Click:
    Exit Sub

Err_cmdLastRecord_Click:
    MsgBox " There are no more records ", vbExclamation, ""
    Resume Exit_cmdLastRecord_Click

End Sub

我的第一个想法是,在您尝试转到新记录之前,您的记录没有保存,所以试试这个,看看它是否能解决问题。

Private Sub add_Click()

    If Me.Dirty Then
        Me.Dirty = False
    End If

  DoCmd.GoToRecord , , acNewRec

End Sub

我提到的同样问题的另一件事是您应该检查表单数据源查询。是否所有的 FIELDS 都可用,JOINS 是否正确? 在我的例子中,我将索引连接从文本字段更改为数字字段,它也需要在表单数据源查询中进行更新。

如果有人仍然遇到这个问题,我无法解释为什么会这样,但这里有一个解决方法:

重置表单上的AllowAdditionsProperty

Me.[form_name].Form.AllowAdditions = False
Me.[form_name].Form.AllowAdditions = True

这是一个非常奇怪的问题,因为我的代码几周以来一直运行良好。我正在使用这样的东西:

Me.frm.SetFocus
   DoCmd.GoToRecord , , acNewRec
     !Field1 = value1
     !Field2 = value2

它工作得很好,然后我突然开始收到“无法转到指定记录”错误,即使我没有对代码进行任何更改。表单设置很好,我可以整天在基础 table 中添加记录。我什至在 Immediate window 中检查了表单的 AllowAdditions 属性,结果显示它已设置为 True。但我尝试了这个变通办法,它奏效了。

现在我在 Docmd.GoToNewRoecordacNewRecord 的每个实例之后添加这两行并且它正在工作。