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



© 2018 | Анна Петросян | pashelp@yandex.ru