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

时间:2016-10-28 13:15:24

标签: access-vba ms-access-2010

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

还有另外61个字段(分别命名为'0','1','2'......'60')代码需要工作:我希望代码循环遍历,每个记录条目 - 对于VBA到Dlookup,使用Concat + age字段到另一个表(称为:tbl_Final_Probabilities)并撤回概率并以正确的概率填充这61个字段中的每一个。这些字段设置在数字字段中,数据类型为Single。

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

所有帮助欢迎我如何纠正此问题,使用的代码如下。

Punch and pie。

代码:

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

提前感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:1)

你的循环内翻:

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

答案 1 :(得分:0)

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