Ms access 运行时错误';3164';:';无法更新字段';-访问VBA问题

Ms access 运行时错误';3164';:';无法更新字段';-访问VBA问题,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我为Access编写的一段VBA有问题。我有一个带有连接字段“Concat”(字符串字段)和名为“Age”(带数值的整型字段)的表 还有61个字段(分别命名为“0”、“1”、“2”…“60”)代码需要在其中工作:我希望代码循环通过,并且,每个记录条目-对于VBA到Dlookup,使用Concat+age字段到另一个表(称为:tbl_Final_Probabilities)然后返回一个概率,用正确的概率填充这61个字段中的每一个。这些字段设置为数字字段,数据类型为单一 代码提取正确的概率,但当我尝

我为Access编写的一段VBA有问题。我有一个带有连接字段“Concat”(字符串字段)和名为“Age”(带数值的整型字段)的表

还有61个字段(分别命名为“0”、“1”、“2”…“60”)代码需要在其中工作:我希望代码循环通过,并且,每个记录条目-对于VBA到Dlookup,使用Concat+age字段到另一个表(称为:tbl_Final_Probabilities)然后返回一个概率,用正确的概率填充这61个字段中的每一个。这些字段设置为数字字段,数据类型为单一

代码提取正确的概率,但当我尝试在代码行“rs.Fields(a)=b”(在代码中也突出显示)处更新该字段的记录时,我收到错误消息:“运行时错误‘3164’:‘字段无法更新’”

欢迎所有关于我需要如何更正此问题的帮助,使用的代码如下

潘趣酒和馅饼

代码:
提前感谢您提供的所有帮助。

您的代码:rs.Fields(a)=b使用索引“a”(在第一个循环中为0)对字段进行寻址。在您的表中,这可能是一个自动递增字段,因此无法更新。如果要在名为“0”、“1”的字段中写入,。。。使用以下语法:rs.Fields(x+a)=b,其中x是字段“0”之前表中存在的字段数+1(因为循环以0开头)。

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

干杯-纠正了这一点,它的工作!没有意识到这是字段后面的索引值。出于兴趣,如果我想引用字段的名称而不是它的索引值,我应该使用什么语法/公式?您可以使用
rst!字段(“NameOfField”)
rst!Nameofield
或(如果是空格或奇怪的名称)
rst![字段名称]
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