RecordsetClone导致ODBC错误

时间:2016-04-04 14:02:25

标签: vba ms-access-2010 recordset

我试图从表单中复制记录。按钮后面的代码如下所示:

With Me.RecordsetClone
   .AddNew
      !TableField1 = Me.CorrespondingTextboxName1
      !TableField2 = Me.CorrespondingTextboxName2
      … etc for the rest of the fields                 
  .Update
  .Bookmark = .LastModified
End With

问题是,当我到达.Update行时,我收到的错误是ODBC Call Failed

如果我单步执行代码,每个字段似乎都可以正确解析,它只是它似乎不喜欢的更新语句。

为什么会发生这种情况和/或如何纠正它?

3 个答案:

答案 0 :(得分:0)

不是答案,但评论中的代码很糟糕。

您可以获得有关" ODBC呼叫失败"的更多信息。使用DBEngine.Errors集合。在错误处理程序中运行以下代码:

Dim errX As DAO.Error

For Each errX In Errors
    Debug.Print errX.Number & ": " & errX.Description
Next errX

编辑:当它工作时,你可能想要

Me.Bookmark = .LastModified

答案 1 :(得分:0)

也许你复制了Id?

这是一个经验证的功能,可以通过点击按钮复制记录:

Private Sub btnCopy_Click()

  Dim rstSource   As DAO.Recordset
  Dim rstInsert   As DAO.Recordset
  Dim fld         As DAO.Field

  If Me.NewRecord = True Then Exit Sub

  Set rstInsert = Me.RecordsetClone
  Set rstSource = rstInsert.Clone
  With rstSource
    If .RecordCount > 0 Then
      ' Go to the current record.
      .Bookmark = Me.Bookmark
      With rstInsert
        .AddNew
          For Each fld In rstSource.Fields
            With fld
              If .Attributes And dbAutoIncrField Then
                ' Skip Autonumber or GUID field.
              Else
                ' Copy field content.
                rstInsert.Fields(.Name).Value = .Value
              End If
            End With
          Next
        .Update
        ' Go to the new record and sync form.
        .MoveLast
        Me.Bookmark = .Bookmark
        .Close
      End With
    End If
    .Close
  End With

  Set rstInsert = Nothing
  Set rstSource = Nothing

End Sub

答案 2 :(得分:0)

对于发现此线程的任何人,我使用的方法与张贴者相似,并且收到相同的错误。原来,我违反了SQL Server表上的索引。确保检查并确保没有违反任何索引,约束等。