【问题标题】:What causes Run-time error '13' - No Current Record导致运行时错误“13”的原因 - 没有当前记录
【发布时间】:2020-07-01 15:17:32
【问题描述】:

前言:虽然我在此错误消息的任一部分分别找到了其他问题和答案(即运行时错误“13”=类型不匹配或“无当前记录”主要与错误“3021”相关),但我还没有找到这两部分的错误信息的组合以及这个问题的对应答案。

我有一个连接到 MSSQL 数据库的访问 UI。至少 18 个月以来,我没有对 Access UI 或数据库进行任何更改,并且一切正常运行,没有任何错误。直到现在才出现这个错误。

我已恢复到以前版本的 Access,但这并没有修复错误消息。

这是(部分)导致错误的代码,箭头指向调试器所说的问题所在:

 If Not IsNull(Me.cbIngredient) Then
        Set rs = CurrentDb().OpenRecordset("Select * from Recipes where PrepId = " & Me.Id & " and IngredientID = " & Me.cbIngredient, dbOpenDynaset, dbSeeChanges)
        If rs.RecordCount = 1 Then
            Set rs = Nothing
            MsgBox "You already added this ingredient!"
            Exit Sub
        End If

        Set rs = CurrentDb.OpenRecordset("Select u.id, u.uom from ingredients as i inner join uoms as u on i.uom = u.id where i.Id = " & Me.cbIngredient, dbOpenDynaset, dbSeeChanges)
        rs.MoveLast
        baseUomId = rs.Fields(0)
        baseUom = rs.Fields(1)
        If Me.Uom <> baseUomId Then
            Set rs = CurrentDb.OpenRecordset("Select MasterId from uoms where Id = " & Me.Uom, dbOpenDynaset, dbSeeChanges)
            rs.MoveLast
            If IsNull(rs.Fields(0)) Or rs.Fields(0) <> baseUomId Then
                Set rs = Nothing
                MsgBox "Uom should be compatible with " & baseUom
                Exit Sub
            End If
        End If
    Else
        Set rs = CurrentDb().OpenRecordset("Select * from Recipes where MenuId = " & Me.Id & " and PrepID = " & Me.PrepId, dbOpenDynaset, dbSeeChanges)
        If rs.RecordCount = 1 Then
            Set rs = Nothing
            MsgBox "You already added this prep!"
            Exit Sub
        End If
    End If
    Set rs = CurrentDb().OpenRecordset("Recipes", dbOpenDynaset, dbSeeChanges)
    rs.AddNew
    rs.Fields(1) = Me.IngredientType
    rs.Fields(2) = Me.Id
    rs.Fields(3) = Me.cbIngredient
    rs.Fields(4) = Me.PrepId
  >>rs.Fields(5) = Me.Quantity
    rs.Fields(6) = Me.Uom
    rs.Update
    rs.MoveLast
    Me.RecipesForm.Requery
    Me.cbIngredient = Null
    Me.Quantity = Null
    Me.PrepId = Null
    Me.Uom = Null
    Me.IngredientType = Null
    Me.cbIngredient.SetFocus

    Set rs = Nothing

End Sub

如前所述,这件事已经完美运行了 18 个月,直到几天前,所以我的理论是某处发生了变化,我猜它与 Access 有关,因为 SQL Server 没有更新(但 MS Access 可能是)。

错误行的 SQL 字段类型设置为“FLOAT”,这与我尝试输入的值相对应。

感谢您的帮助和建议。

更新:单步执行调试器时,它实际上最初仅显示“类型不匹配”错误,因此“无当前记录”附加错误消息可能是由于第一个错误并同时显示。仍然不知道为什么会出现类型不匹配错误。

【问题讨论】:

  • 你试过用调试器观察rs.Fields(5)Me.Quantity的类型和值吗?
  • 嗨@GSerg 我不确定您的意思或如何“观察”调试器中的值。我只看到在调试器中突出显示错误的代码和弹出的错误消息,但我没有看到正在传递的值。
  • @Gserg aah,我明白了,是的,我可以看到值和类型,它们显示为正确的格式类型和值。
  • “类型不匹配”与 DAO 突然之间?听起来很像最近的带有 DECIMAL 列的 Access 错误。 stackoverflow.com/questions/62344861/data-type-number-decimal
  • 这能回答你的问题吗? Data type Number-Decimal

标签: sql-server vba ms-access


【解决方案1】:

@Andre 给出了答案!当然,这是一个在 MS Access 更新中出现的错误。

【讨论】:

    猜你喜欢
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多