Моя проблема заключается в том, что с каждой итерацией цикла обновления я теряю около 100 тыс. Памяти, поэтому, в конце концов, я получаю ошибку ресурса после нескольких тысяч итераций.Microsoft Access 2010 Memory Leak DAO recordset и RUNSQL
Вопрос в том, почему я теряю память?
Ниже приведен фрагмент кода, который является обновлением цикла.
Критерии извлекаются из локальной базы данных методом dao.recordset. - rs1
Сравнение происходит из целевой базы данных, где будет выполнено обновление, метод dao.recordset. - rs2 является целью чтения, чтобы проверить, нужно ли мне делать обновление.
Обновление представляет собой запрос Docmd.Runsql в связанную таблицу общих совпадений. И да, я знаю, что могу использовать .edit и .update, но в этом случае другие странные вещи случаются для другого поста. :)
Access 2010 в Sharepoint 2010
Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Set db = CurrentDb
Set rs1 = db.OpenRecordset("datefix")
Do While Not rs1.EOF
Set rs2 = db.OpenRecordset("select `Required delivery` from xyzzy where `SO Line` = '" & rs1.Fields(0).Value & "'")
If rs1.Fields(1).Value = rs2.Fields("Required delivery") Then
Else
DoCmd.RunSQL "update ProblemTracking set `Required delivery` = '" & rs1.Fields(1).Value & "', `1st GI Dat` = '" & rs1.Fields(2).Value & "' where `SO Line` = '" & rs1.Fields(0).Value & "'"
End If
rs2.Close
Set rs2 = Nothing
rs1.MoveNext
Loop
Да, я наблюдаю, как размер памяти MSACCESS.EXE растет с каждой итерацией. Закрытие позже. Похоже, что память растет на 100 кбайт. – user3666385
Попробуйте использовать currentdb.Execute. Документ завернут в транзакцию, и это может быть причиной отказа памяти. –