MS Access | Редактировать данные Recordset-а формыСкачать пример в zip: TwoRecordsetsExample.zipСкачать пример в accdb: TwoRecordsetsExample.accdb |
См. в этом разделе:
➢Пройтись циклом по данным формы и отредактировать её пустые записи ➢Пройтись циклом по данным формы и отредактировать её пустые записи связанными данными из запроса
Например, открыта ленточная форма и задача пройтись циклом по данным формы и отредактировать её пустые записи (если в ленточной форме выставлен фильтр, он будет учитываться). Процесс инициируется пользователем (управление через Dialog)
Private Sub Button_Click() Dialog = MsgBox("Обновить отфильтрованные записи?", vbYesNo) If Dialog = vbYes Then Set rst = Recordset 'Recordset на форме If rst.EOF = False Then 'если записи есть rst.MoveFirst 'перейти на первую запись Dim nUpdated As Integer Do While rst.EOF = False 'до последней записи в Recordet-е If IsNull(Me.FIELD_NAME) Then 'если в обновляемом поле пусто nUpdated = nUpdated + 1 Me.FIELD_NAME = "..." End If rst.MoveNext Loop Me.Requery MsgBox "Отфильтрованные записи обновлены (в количестве: " & nUpdated & ")", vbExclamation Else MsgBox "Нет записей для обновления", vbExclamation End If End If End Sub
Тот же пример, с двумя Recordset-ами: пройтись циклом по данным формы и отредактировать её пустые записи связанными данными из запроса
'процедура принимает связанный TerritoryID, вычисляет SalesManagerName (из запроса SalesManager_BY_TerritoryID_QRY) 'и редактирует данные формы: заполняет данными поле SalesPersonName по полученному TerritoryID
Dim qry As QueryDef Set qry = CurrentDb.QueryDefs!SalesManager_BY_TerritoryID_QRY 'Запрос возвращает SalesManagerName на заданный TerritoryID
If Recordset.EOF Then 'если рекордсет формы пуст MsgBox "Нет клиентов", vbExclamation Else Recordset.MoveFirst 'перейти на первую запись рекордсета формы Do While Not Recordset.EOF 'до конца рекордсета формы If IsNull(Recordset!SalesPersonName) Then 'если на клиента ещё не проставлен SalesPersonName Recordset.Edit 'перевести текущую запись рекордсета в режим редактирования qry.Parameters!TerritoryID_PARAM = TerritoryID 'в запросе оформлен параметр (TerritoryID_PARAM) Dim qry_recordset As Recordset 'рекордсет запроса SalesManager_BY_TerritoryID_QRY qry_recordset = qry.OpenRecordset 'открыть рекордсет запроса Recordset!SalesPersonName = qry_recordset!SalesManager 'из рекордсета запроса в рекордсет формы вставить найденное значение Recordset.Update Recordset.MoveNext Loop Me.Refresh 'обновить обновлённую последнюю запись на экране End If
Скачать пример в zip: TwoRecordsetsExample.zipСкачать пример в accdb: TwoRecordsetsExample.accdb |