Объект Recordset2 (DAO)
Область применения: Access 2013, Office 2013
Объект Recordset2 представляет записи в базовой таблице или записи, получаемые в результате выполнения запроса.
Комментарии
Объект Recordset2 содержит все те же свойства и методы, что и объект Recordset. Объект Recordset2 содержит новое свойство ParentRecordset, которое поддерживает многозначные типы полей.
Пример
В примере ниже показано, как выполнять навигацию по объекту Recordset, содержащему многозначное поле.
Пример кода изсправочника программиста Microsoft Access 2010.
Sub PrintStudentsAndClasses()
Dim dbs As DAO.Database
Dim rsStudents As DAO.Recordset2 'Recordset for students
Dim rsClasses As DAO.Recordset2 'Recordset for classes
Dim fld As DAO.Field2
'open the database
Set dbs = CurrentDb()
'get the table of students
Set rsStudents = dbs.OpenRecordset("tblStudents")
'loop through the students
Do While Not rsStudents.EOF
'get the classes field
Set fld = rsStudents("Classes")
'get the classes Recordset
'make sure the field is a multi-valued field before
'getting a Recordset object
If fld.IsComplex Then
Set rsClasses = fld.Value
End If
'access all records in the Recordset
If Not (rsClasses.BOF And rsClasses.EOF) Then
rsClasses.MoveLast
rsClasses.MoveFirst
End If
'print the student and number of classes
Debug.Print rsStudents("FirstName") & " " & rsStudents("LastName"), _
"Number of classes: " & rsClasses.RecordCount
'print the classes for this student
Do While Not rsClasses.EOF
Debug.Print , rsClasses("Value")
rsClasses.MoveNext
Loop
'close the Classes Recordset
rsClasses.Close
'get the next student
rsStudents.MoveNext
Loop
'cleanup
rsStudents.Close
Set fld = Nothing
Set rsStudents = Nothing
Set dbs = Nothing
End Sub
В примере ниже показано, как выполнять навигацию по файлам в поле вложения. Код из этого примера печатает тип и имя файла каждого вложения в окне интерпретации.
Sub ListAttachments()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset2
Dim rsA As DAO.Recordset2
Dim fld As DAO.Field2
'Get the database, recordset, and attachment field
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tblAttachments")
Set fld = rst("Attachments")
'Navigate through the table
Do While Not rst.EOF
'Print the first and last name
Debug.Print rst("FirstName") & " " & rst("LastName")
'Get the recordset for the Attachments field
Set rsA = fld.Value
'Print all attachments in the field
Do While Not rsA.EOF
Debug.Print , rsA("FileType"), rsA("FileName")
'Next attachment
rsA.MoveNext
Loop
rsA.Close
'Next record
rst.MoveNext
Loop
rst.Close
dbs.Close
Set fld = Nothing
Set rsA = Nothing
Set rst = Nothing
Set dbs = Nothing
End Sub
В примере ниже показано, как добавить файлы из папки с указанным путем в поле вложений.
Public Function LoadAttachments(strPath As String, Optional strPattern As String = "*.*") As Long
Dim dbs As DAO.Database
Dim rst As DAO.Recordset2
Dim rsA As DAO.Recordset2
Dim fld As DAO.Field2
Dim strFile As String
'Get the database, recordset, and attachment field
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tblAttachments")
Set fld = rst("Attachments")
'Navigate through the table
Do While Not rst.EOF
'Get the recordset for the Attachments field
Set rsA = fld.Value
'Load all attachments in the specified directory
strFile = Dir(strPath & "\*.*")
rst.Edit
Do While Len(strFile) > 0
'Add a new attachment that matches the pattern.
'Pass "" to match all files.
If strFile Like strPattern Then
rsA.AddNew
rsA("FileData").LoadFromFile strPath & "\" & strFile
rsA.Update
'Increment the number of files added
LoadAttachments = LoadAttachments + 1
End If
strFile = Dir
Loop
rsA.Close
rst.Update
'Next record
rst.MoveNext
Loop
rst.Close
dbs.Close
Set fld = Nothing
Set rsA = Nothing
Set rst = Nothing
Set dbs = Nothing
End Function
В примере ниже показано, как сохранить файлы, хранящиеся в поле вложения, в папку с указанным путем.
Public Function SaveAttachments(strPath As String, Optional strPattern As String = "*.*") As Long
Dim dbs As DAO.Database
Dim rst As DAO.Recordset2
Dim rsA As DAO.Recordset2
Dim fld As DAO.Field2
Dim strFullPath As String
'Get the database, recordset, and attachment field
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tblAttachments")
Set fld = rst("Attachments")
'Navigate through the table
Do While Not rst.EOF
'Get the recordset for the Attachments field
Set rsA = fld.Value
'Save all attachments in the field
Do While Not rsA.EOF
If rsA("FileName") Like strPattern Then
strFullPath = strPath & "\" & rsA("FileName")
'Make sure the file does not exist and save
If Dir(strFullPath) = "" Then
rsA("FileData").SaveToFile strFullPath
End If
'Increment the number of files saved
SaveAttachments = SaveAttachments + 1
End If
'Next attachment
rsA.MoveNext
Loop
rsA.Close
'Next record
rst.MoveNext
Loop
rst.Close
dbs.Close
Set fld = Nothing
Set rsA = Nothing
Set rst = Nothing
Set dbs = Nothing
End Function
В примере ниже показано, как удалить файл, хранящийся в поле вложения.
Function RemoveAttachment(strRemoveFile As String, Optional strFilter As String) As Long
Dim dbs As DAO.Database
Dim rst As DAO.Recordset2
Dim rsA As DAO.Recordset2
Dim fld As DAO.Field2
'Get the database
Set dbs = CurrentDb
'Open the recordset. If the strFilter is supplied, add it to the WHERE
'clause for the recordset. Otherwise, any files matching strFileName
'will be deleted
If Len(strFilter) > 0 Then
Set rst = dbs.OpenRecordset("SELECT * FROM tblAttachments WHERE " & strFilter)
Else
Set rst = dbs.OpenRecordset("tblAttachments")
End If
'Get the Attachment field
Set fld = rst("Attachments")
'Navigate through the recordset
Do While Not rst.EOF
'Get the recordset for the Attachments field
Set rsA = fld.Value
'Walk the attachments and look for the file name to remove
Do While Not rsA.EOF
If rsA("FileName") Like strRemoveFile Then
rsA.Delete
'Increment the number of files removed
RemoveAttachment = RemoveAttachment + 1
End If
rsA.MoveNext
Loop
'Cleanup the Attachments recordset
rsA.Close
Set rsA = Nothing
'Next record
rst.MoveNext
Loop
rst.Close
dbs.Close
Set fld = Nothing
Set rst = Nothing
Set dbs = Nothing
End Function