运行时错误:3021在多个表记录集循环中找不到当前记录

时间:2017-09-12 16:38:49

标签: sql vba ms-access access-vba

我的表格中充满了不同设备的问题。用户选择设备类型然后回答每个工具类别的问题。每个工具类别都是一个表格。请参见图片。

enter image description here

我正在尝试使用LineKey表中的自动编号作为我的主要密钥ID向每个表添加新记录。但是我得到了:

  

3021错误“找不到当前记录”

当我循环遍历每个表添加新记录时。如果我运行代码,它会在rec.Edit的第一个循环中出错。如果我通过中断遍历代码,它将通过第一个表循环,但在rec.Edit处出现第二个表的错误。我不确定我在这里缺少什么。

CODE:

Private Sub btnUpDatabase_Click()
    Dim i As Integer, j As Integer, e As Integer, ID As Integer
    Dim db As Database
    Dim rec As Recordset
    Dim Value As String

    Set db = CurrentDb

    'Create Record ID "Key" in lineKey table
    Set rec = db.OpenRecordset("SELECT * FROM LineKeys")
    rec.AddNew
        rec("Line") = Me.txtLine.Value
        rec("Part Number") = Me.txtPartNumber.Value
        rec("Equipment") = Me.cmbEquip.Value
    rec.Update

    Set rec = CurrentDb.OpenRecordset("Select @@Identity")
    ID = rec(0)
    Set rec = Nothing

    Select Case cmbEquip.Value

        Case "OP10 Lathe"
            Dim strArray(0 To 6) As String
              strArray(0) = "Tool Holders"
              strArray(1) = "Chuck Jaws"
              strArray(2) = "Jaw Grippers"
              strArray(3) = "Drawbars"
              strArray(4) = "Actuators"
              strArray(5) = "Chatter Pin"
              strArray(6) = "Chatter Pin Spring"

            j = 0
            For e = 0 To 6
                Set rec = db.OpenRecordset("SELECT * FROM [" & strArray(e) & "]")
                rec.AddNew
                rec.Fields("ID") = ID

                For i = 1 To 7
                    rec.Edit
                    rec.Fields("A" & i & "") = Me.Controls("cmb" & j & i & "").Value
                    rec.Update
                Next

                j = j + 1

                Set rec = Nothing
            Next

    End Select

    Set rec = Nothing
    Set db = Nothing

End Sub

1 个答案:

答案 0 :(得分:1)

您可能正在混淆第一个未完全关闭的.AddNew.Edit进程,因此记录已锁定。

考虑替换.Edit并将.Update移到嵌套For循环之外。因此,您在一个调用中更新整行,而不是在循环中迭代地更新单个列。您还可以简化外部数组循环:

      For each e In Array("Tool Holders", "Chuck Jaws", "Jaw Grippers", "Drawbars", _
                          "Actuators", "Chatter Pin", "Chatter Pin Spring")
            Set rec = db.OpenRecordset("SELECT * FROM [" & e & "]")

            rec.AddNew
            rec.Fields("ID") = ID
            For i = 1 To 7
                rec.Fields("A" & i & "") = Me.Controls("cmb" & j & i & "").Value
            Next i
            rec.Update

            j = j + 1
            Set rec = Nothing
        Next e

我再次建议不要使用不同的类型值(如工具类别)存储单独的,结构相似的表格。将all整合到一个 Tool 表中,而不需要很多(如果有的话)循环。通过这种方式,您不会更改新类别的架构,并且存储更有效,因为与许多表相比,许多行都很便宜。