在需要维护的数据库中(MS Access 2010),我使用VBA程序清理记录,具体来说就是:将字段中的值从“是”设置为“否”。该过程遍历所有记录,并根据需要在相应字段中设置值。
到目前为止,我的数据库大约有900条记录。不会太多,应该考虑一下。
我的问题:VBA程序运行非常缓慢。在当前计算机上,我必须等待大约10秒钟,直到循环通过900条记录为止。在日常工作中这是不切实际的。
我需要的:我正在寻找通过代码改进或完全不同的方法来加快此速度的方法。
这是我的程序:
Private Sub WipeSelectionMarks_Click()
'Remove any filter that might be set to reduce the number of records in
'the form - We want here to operate on all records in the database!
Me.Filter = ""
Me.FilterOn = False
'Don't know if we really need two commands here; but at least it works
'Operate on a recordset that holds all the records displayed in the form
Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
rs.MoveFirst
Do Until rs.EOF
With rs
.Edit
!Int_IwSelectMove = False
.Update
End With
rs.MoveNext
Loop
'Message box with info what has been done
MsgBox "A total of " & rs.RecordCount & " records were updated by wiping the Move mark"
'Cleaning up
Set rs = Nothing
Me.Refresh
End Sub
注1:如果解决方案将改用SQL命令,我将不胜感激实用的提示或示例。我仍然在许多地方使用SQL命令,但是在这里正确使用将很有帮助。
注2:或可以以仅记录所关注字段的值为“是”(通常只有900的20-30)和那些“否”的记录的方式重写VBA过程。被排除在外?
答案 0 :(得分:2)
可以仅以记录以下内容的方式重写VBA过程: 该字段的值为“是”已处理
实际上,这可能是最快的方法,因为您不必重新查询表单:
With rs
Do Until .EOF
If !Int_IwSelectMove.Value = True Then
.Edit
!Int_IwSelectMove = False
.Update
End If
.MoveNext
Loop
.Close
End With
或者您可以使用FindFirst或过滤的记录集。在表单的记录集上运行SQL通常是最后的选择。
答案 1 :(得分:1)
您可以使用UPDATE命令:
numpy