VBA, MS Access MS Access в примерах

Перебор всех записей (DAO)

Dim rst As DAO.Recordset
   
    'Set rst = CurrentDb.OpenRecordset("tblExample", dbOpenDynaset)   'Открытие на редакцию
    Set rst = CurrentDb.OpenRecordset("tblExample", dbOpenSnapshot)  'Только просмотр
    
'Перебор всех записей в наборе
    With rst
        Do Until .EOF = True 'Цикл до конца набора
            'Тут операции с записью:
            '...
            .MoveNext
        Loop
    End With
    
    On Error Resume Next
    rst.Close
    Set rst = Nothing



Или так:

Private Sub AllRecordsInRecordset()
Dim rst As DAO.Recordset
On Error GoTo AllRecordsInRecordsetErr
    
    'Set rst = CurrentDb.OpenRecordset("tblExample", dbOpenDynaset)   'Открытие на редакцию
    Set rst = CurrentDb.OpenRecordset("tblExample", dbOpenSnapshot)  'Только просмотр
    
'Перебор всех записей в наборе
    With rst 
        Do Until .EOF = True 'Цикл до конца набора
            'Тут операции с записью:

            '...
            .MoveNext
        Loop
    End With

AllRecordsInRecordsetEnd:
    On Error Resume Next
    rst.Close
    Set rst = Nothing
    Exit Sub
    
AllRecordsInRecordsetErr:
    MsgBox "Процедура [...] привела к ошибке:" & vbCrLf & _
    Err.Description & vbCrLf & " Err#" & Err.Number, vbCritical
    Resume AllRecordsInRecordsetEnd
End Sub


Пример перебора записей с обновлением данных таблицы:

Private Sub FileSizesToTable()
'Установка размеров файлов в таблице файлов
'--------------------------------------------------------------------------
Dim rst As DAO.Recordset
Dim lFileLen As Long
Dim s$

On Error GoTo FileSizesToTable_Err
    'Выборка строк где размер файлов не проставлен (itfSizeBytes=0)
    s = "SELECT * FROM dtItemsFiles WHERE (itfSizeBytes=0)"
    Set rst = CurrentDb.OpenRecordset(s, dbOpenDynaset)   'Открытие на редакцию
    
    With rst
        Do Until .EOF = True 'Цикл до конца таблицы
            '...операции с записью
            s = !itfName 'Имя файла
            'тут conFileStorige = относительная папка типа "\ProgectData\Files\"
            s = CurrentProject.Path & conFileStorige & s 'получили полный путь к файлу
            
            If Dir(s) <> "" Then 'если файл существует
                .Edit   ' ВКЛ. режим редактирования
                lFileLen = FileLen(s)      ' получаем размер файла в байтах
                !itfSizeBytes = lFileLen   ' и записываем его
                .Update ' Сохранили ...
                'Debug.Print Format(lFileLen, "000 000 000") & " - " & !itfName
            End If
            .MoveNext 'Переход к следующей записи
        Loop
    End With

FileSizesToTable_End:
    On Error Resume Next
    rst.Close
    Set rst = Nothing
    Exit Sub
    
FileSizesToTable_Err:
    MsgBox "Процедура [FileSizesToTable] привела к ошибке:" & vbCrLf & _
    Err.Description & vbCrLf & " Err#" & Err.Number, vbCritical, "Ошибка!"
    Resume FileSizesToTable_End
End Sub

Назад ToTop
L.E. 16.10.2018
Рейтинг@Mail.ru