| Обновление данных на форме методом Refresh В проектах ADP обновление формы методом Refresh проявляет себя так же, как и Requery
 В качестве альтернативы можно выбрать один из способовОбновление одной, текущей записи
 Me.Recordset.Resync adAffectCurrent, adResyncAllValues
 (Предварительно нужно корректно указать свойства «Однозначная таблица» UniqueTable и «Команда синхронизации» ResyncCommand)
Обновление всего набора с последуещей установкой текущей записи
 On error Resume Nextвариант более безглючныйDim bm
 ' запоминаем положение указателя формы
 bm = Me.Bookmark
 Me.Requery
 ' Ждем пока закончится загрузка данных в рекордсет
 Do WhileMe.RecordsetClone.State And adStateFetching
 DoEvents
 Loop
 Me.Bookmark = bm
 On error Resume Next
 Dim bm
 ' запоминаем положение указателя формы
 bm = Me.Bookmark
 Me.Requery
 ' Ждем пока закончится загрузка данных в рекордсет
 Dim rs
 'хитро но так надо для безглючности
 set rs = me.recordsetclone.clone
 WaitEndOfRequery RS 'Процедура приведена ниже
 Me.Bookmark = bmИспользовать пользовательскую функциюrs.close
 setrs = Nothing
 
 Обновление набора записей другими способами
 (формы, подчиненной формы, элементов управления список и поля со списком)
 Одно из:
Me.Requery Me.Recordset.Requery
 Me.Recordsource = Me.Recordsource
 DoCmd.RunCommand acCmdRefresh
 обновление значения главного поля для подчиненной формы
 обновление значения поля - являющегося источником входного параметра
 после любого обновления желательно дождаться загрузки всех записей:Стандартный вариант:
 Do WhileMe.Recordset.State And adStateFetching
 DoEvents
 Loop
 Продвинутый вариант, работающий на медленных соединениях:(by Latuk)
 Public Sub WaitEndOfRequery(rs AsADODB.Recordset, Optional SleepTime Asinteger = 33)'Дождатся заполнения рекордсета
 'Public Declare Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)
 DimT As Single
 T = Timer
 Do
 DoEvents
 Sleep SleepTime
 Loop Until(rs.State = adStateOpen) OrTimer - T > GetOption("OLE/DDE Timeout (sec)")
 End Sub
 
 Прим. : не во всех случаях корректно выполняется обновление подчиненной формы без установки на нее фокуса. Поэтому всегда перед вызовом метода обновление объекта - установите на него фокус. Для подчиненных форм , которые вложены друг в друга фокус нужно устанавливать на все объекты последовательно 1 Главная форма.Setfocus, подчиненная главной формы.Setfocus , подчиенная подчиненной.Setfocus 
 |