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
答案 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