В моей базе данных (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: Или можно переписать процедуру VBA таким образом, чтобы обрабатывались только записи, для которых у рассматриваемого поля есть значение «да» (обычно это только 20-30 из 900), и те, у которых"нет" опущены?