Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 在表中循环并更改值时访问崩溃_Ms Access_Crash_Recordset_Calculated Columns_Ms Jet Ace - Fatal编程技术网

Ms access 在表中循环并更改值时访问崩溃

Ms access 在表中循环并更改值时访问崩溃,ms-access,crash,recordset,calculated-columns,ms-jet-ace,Ms Access,Crash,Recordset,Calculated Columns,Ms Jet Ace,当我在表中循环并使用以下代码更改其中一个字段的值时,Access不断崩溃: Set db = CurrentDb Set rs = db.OpenRecordset(prProdTblName) 'PrevDept , PrevOpNo, PrevPartNo rs.MoveFirst rs.Edit rs![Op No] = 10 rs.Update Do Until rs.EOF With rs PrevOpNo = ![Op No] PrevDept

当我在表中循环并使用以下代码更改其中一个字段的值时,Access不断崩溃:

Set db = CurrentDb
Set rs = db.OpenRecordset(prProdTblName)
'PrevDept , PrevOpNo, PrevPartNo
rs.MoveFirst
rs.Edit
rs![Op No] = 10
rs.Update
Do Until rs.EOF
    With rs
        PrevOpNo = ![Op No]
        PrevDept = ![Department Code]
        PrevPartNo = ![Part No]
        .MoveNext
        .Edit
        If (![Department Code] = "SMD" And PrevDept <> "SMD") Then
            ![Op No] = 500
        ElseIf (![Department Code] <> "SMD" And PrevDept = "SMD" And ![Part No] = PrevPartNo) Then
            ![Op No] = 1000
        ElseIf (rs![Part No] <> PrevPartNo) Then
            ![Op No] = 10
        Else
            ![Op No] = PrevOpNo + 10
        End If
        .Update
    End With
Loop
rs.Close
Set rs = Nothing
此外,当我尝试使用另一种SQL代码时,它似乎是一个无休止的查询:

SQLcommandStr = "SELECT T1.[ID], (Select IIF((T1.[Department Code]='SMD') AND (T2.[Department Code]<>'SMD'),500,IIF((T1.[Department Code]<>'SMD') AND (T2.[Department Code]='SMD') AND (T1.[Part No] = T2.[Part No]),1000,IIF((T1.[Part No] <> T2.[Part No] OR (T1.[ID] = (SELECT MIN(T4.[ID]) FROM " & prProdTblName & " T4))),10,T2.[Op No] + 10))) From " & prProdTblName & " T2 WHERE T2.[ID] = (SELECT MAX(T3.[ID]) FROM " & prProdTblName & " T3 WHERE T1.[ID] > T3.[ID])) INTO TblTemp FROM " & prProdTblName & " T1"

DoCmd.RunSQL SQLcommandStr

您可能会在EOF处反弹:

Set db = CurrentDb
Set rs = db.OpenRecordset(prProdTblName)
rs.MoveFirst
rs.Edit
rs![Op No] = 10
rs.Update
Do Until rs.EOF
    With rs
        PrevOpNo = ![Op No]
        PrevDept = ![Department Code]
        PrevPartNo = ![Part No]
        .MoveNext
        If .EOF = False Then
            .Edit
            If (![Department Code] = "SMD" And PrevDept <> "SMD") Then
                ![Op No] = 500
            ElseIf (![Department Code] <> "SMD" And PrevDept = "SMD" And ![Part No] = PrevPartNo) Then
                ![Op No] = 1000
            ElseIf (rs![Part No] <> PrevPartNo) Then
                ![Op No] = 10
            Else
                ![Op No] = PrevOpNo + 10
            End If
            .Update
        End If
    End With
Loop
rs.Close
Set rs = Nothing

您是对的,问题是EOF,但是因为EOF是指针,而不是最后一行本身,所以循环仍然会反弹。我的解决方案是计算行数并在最后一行退出循环。谢谢