Обновление данных на форме методом 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
|