运行 时间错误“3164”:'Field cannot be updated' - 访问 VBA 问题
Run time error '3164': 'Field cannot be updated' - Access VBA issue
我为 Access 编写的一篇 VBA 有问题。我有一个 table,它有一个连接字段 'Concat'(字符串字段)和一个名为 'Age' 的字段(具有数值的整数字段)。
还有另外 61 个字段(分别命名为“0”、“1”、“2”...“60”)代码需要在其中工作:我希望代码循环遍历并按记录entry - 对于 VBA 使用 Concat + age 字段到另一个 table(称为:tbl_Final_Probabilities)的 Dlookup 并拉回一个概率并用正确的概率填充这 61 个字段中的每一个。这些字段设置为数值字段,数据类型为Single。
代码提取了正确的概率,但是当我尝试在代码行更新该字段的记录时:"rs.Fields(a) = b"(也在代码中突出显示),我收到错误消息:"Run time error '3164': 'Field cannot be updated'" .
欢迎大家帮助我如何更正这个问题,使用的代码如下。
潘趣酒和馅饼。
代码:
Dim rs As DAO.Recordset
Dim a As Integer
Dim b As Single
Dim lookup As String
Set rs = CurrentDb.OpenRecordset("SELECT * FROM tbl_Circuit_plus_prob")
For a = 0 To 60
If Not (rs.EOF And rs.BOF) Then
rs.MoveFirst
Do Until rs.EOF = True
rs.Edit
lookup = rs!Concat & (rs!age + a)
b = DLookup("Prob_Date", "tbl_Final_Probabilities", "Concat2 = '" & lookup & "'")
rs.Fields(a) = b '- CODE BREAKS DOWN HERE
rs.Update
rs.MoveNext
Loop
End If
Next a
rs.Close
Set rs = Nothing
在此先感谢您提供的所有帮助。
您的代码:rs.Fields(a) = b 以索引 'a'(在第一个循环中为 0)寻址字段,在您的 table 中,这可能是自动递增字段,因此无法更新。如果您想在名称为“0”、“1”...的字段中写入,请使用以下语法:rs.Fields(x + a) = b,其中 x 是字段数+1(因为您的循环以 0) 开头,位于字段“0”之前的 table 中。
你的循环被翻转过来了:
Dim rs As DAO.Recordset
Dim a As Integer
Dim b As Single
Dim lookup As String
Set rs = CurrentDb.OpenRecordset("SELECT * FROM tbl_Circuit_plus_prob")
If Not (rs.EOF And rs.BOF) Then
rs.MoveFirst
Do Until rs.EOF = True
rs.Edit
For a = 0 To 60
lookup = rs!Concat & (rs!age + a)
b = DLookup("Prob_Date", "tbl_Final_Probabilities", "Concat2 = '" & lookup & "'")
rs.Fields(a).Value = b
Next
rs.Update
rs.MoveNext
Loop
End If
rs.Close
Set rs = Nothing
我为 Access 编写的一篇 VBA 有问题。我有一个 table,它有一个连接字段 'Concat'(字符串字段)和一个名为 'Age' 的字段(具有数值的整数字段)。
还有另外 61 个字段(分别命名为“0”、“1”、“2”...“60”)代码需要在其中工作:我希望代码循环遍历并按记录entry - 对于 VBA 使用 Concat + age 字段到另一个 table(称为:tbl_Final_Probabilities)的 Dlookup 并拉回一个概率并用正确的概率填充这 61 个字段中的每一个。这些字段设置为数值字段,数据类型为Single。
代码提取了正确的概率,但是当我尝试在代码行更新该字段的记录时:"rs.Fields(a) = b"(也在代码中突出显示),我收到错误消息:"Run time error '3164': 'Field cannot be updated'" .
欢迎大家帮助我如何更正这个问题,使用的代码如下。
潘趣酒和馅饼。
代码:
Dim rs As DAO.Recordset
Dim a As Integer
Dim b As Single
Dim lookup As String
Set rs = CurrentDb.OpenRecordset("SELECT * FROM tbl_Circuit_plus_prob")
For a = 0 To 60
If Not (rs.EOF And rs.BOF) Then
rs.MoveFirst
Do Until rs.EOF = True
rs.Edit
lookup = rs!Concat & (rs!age + a)
b = DLookup("Prob_Date", "tbl_Final_Probabilities", "Concat2 = '" & lookup & "'")
rs.Fields(a) = b '- CODE BREAKS DOWN HERE
rs.Update
rs.MoveNext
Loop
End If
Next a
rs.Close
Set rs = Nothing
在此先感谢您提供的所有帮助。
您的代码:rs.Fields(a) = b 以索引 'a'(在第一个循环中为 0)寻址字段,在您的 table 中,这可能是自动递增字段,因此无法更新。如果您想在名称为“0”、“1”...的字段中写入,请使用以下语法:rs.Fields(x + a) = b,其中 x 是字段数+1(因为您的循环以 0) 开头,位于字段“0”之前的 table 中。
你的循环被翻转过来了:
Dim rs As DAO.Recordset
Dim a As Integer
Dim b As Single
Dim lookup As String
Set rs = CurrentDb.OpenRecordset("SELECT * FROM tbl_Circuit_plus_prob")
If Not (rs.EOF And rs.BOF) Then
rs.MoveFirst
Do Until rs.EOF = True
rs.Edit
For a = 0 To 60
lookup = rs!Concat & (rs!age + a)
b = DLookup("Prob_Date", "tbl_Final_Probabilities", "Concat2 = '" & lookup & "'")
rs.Fields(a).Value = b
Next
rs.Update
rs.MoveNext
Loop
End If
rs.Close
Set rs = Nothing