我的表格中充满了不同设备的问题。用户选择设备类型然后回答每个工具类别的问题。每个工具类别都是一个表格。请参见图片。
我正在尝试使用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
答案 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 表中,而不需要很多(如果有的话)循环。通过这种方式,您不会更改新类别的架构,并且存储更有效,因为与许多表相比,许多行都很便宜。