如果编辑的列具有索引,则记录编辑两次

时间:2014-06-22 08:44:12

标签: ms-access dao

TableA有一列Long的字段'fielda'。

表中有三条记录,分别为3,4和5。

运行下面的代码后,值应为18,19和20。

如果fielda上没有索引但是如果有,则会出现这种情况 33,19和20.

一条记录被编辑两次。这是DAO中的错误还是这种正常行为?

Dim rs As Recordset
Dim s1 As String

s1 = "select * from tableA"
Set DB = OpenDatabase(DBAddress)
Set rs = MyDB.OpenRecordset(s1)
If Not rs.BOF Or Not rs.EOF Then
    rs.MoveFirst
    Do While Not rs.EOF
        rs.Edit
        rs.Fields("fielda").Value = rs.Fields("fielda").Value + 15
        rs.Update
        rs.MoveNext
    Loop
End If

1 个答案:

答案 0 :(得分:2)

虽然我无法重新创建您描述的行为,但我可以提供一种可能的解释。当您逐步浏览记录时,如果Recordset定期检查其他用户可能对基础表进行的更改,则可能会多次访问同一记录。

说你的Recordset以

开头

3 4 5

并更新第一条记录,以便表格现在包含

18 4 5

如果Recordset然后尝试“刷新”自身并且[fielda]上的索引控制记录在Recordset中出现的顺序,它可能最终成为

<击> 3 4 5 18

如果它继续更新直到.EOF,最终结果可能是

<击> 3 19 20 33

可能的解决方法是

  • 使用SQL语句创建Recordset,该语句在某些其他字段上包含ORDER BY子句,因此记录的顺序在修改时不会改变,或者

    < / LI>
  • 通过SQL应用更新,例如UPDATE tableA SET fielda = fielda + 15