Сначала: насколько велика коллекция диктов.(5, 10 или 1000 ???).
Далее, LOCID - индексированный столбец в этой таблице «MyTable».
Если LOCID уже является индексированным столбцом, вы можете использовать следующий код.Это должно ускорить процесс примерно в 100 или более раз:
Предполагается, что таблица НЕ является связанной таблицей, но фактически является таблицей в базе данных.
Обратите внимание, что вы должныоткройте таблицу как «действующую» - это значение по умолчанию, поэтому я удалил dbOpenDynaset)
Этот код поможет:
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = OpenDatabase("C:\XXX\myDB.accdb")
Set rs = db.OpenRecordset("MyTable") ' <--- note this!!!
rs.Index = "LOCID"
For Each varKey In dict.Keys()
'Table is searched for key
rs.Seek "=", varKey
If rs.NoMatch = True Then
'If the key was not found, insert it
rs.AddNew
rs!LOCID = varKey
rs![Status] = "To Start"
rs.Update
Else
'If the key was found, update its status
rs.Edit
rs![Status] = "Done"
rs.Update
End If
Next
rs.Close
db.Close
Вам также необходимо определитьимя фактического индекса по столбцу LOCID.Я использовал LOCID выше, но вам лучше всего открыть базу данных с доступом, перевернуть таблицу в режиме конструктора, а затем нажать кнопку «индексы» на ленте.Если LOCID является первичным ключом, то хорошей возможностью является то, что индекс называется PrimaryKey.Таким образом, вам нужно имя индекса.