Метод Field.GetChunk (DAO)
Область применения: Access 2013, Office 2013
Возвращает все или часть содержимого объекта Memo или Long BinaryField в коллекции Fields объекта Recordset .
Синтаксис
expression . GetChunk(Offset, Bytes)
выражение: переменная, представляющая объект Field.
Параметры
Имя |
Обязательный/необязательный |
Тип данных |
Описание |
---|---|---|---|
Offset |
Обязательный |
Long |
Количество байтов, которые необходимо пропустить перед началом копирования. |
Байт |
Обязательный |
Long |
Количество возвращаемых байтов. |
Возвращаемое значение
Variant
Примечания
Байты, возвращаемые GetChunk , назначаются переменной. Используйте GetChunk для возврата части общего значения данных за раз. Для повторного создания фрагментов можно использовать метод AppendChunk .
Если смещение равно 0, GetChunk начинает копирование с первого байта поля.
Если число байтов больше числа байтов в поле, GetChunk возвращает фактическое количество оставшихся байтов в поле.
Примечание.
Используйте поле Memo для текста и поместите двоичные данные только в длинные двоичные поля. В противном случае это приведет к нежелательным результатам.
Пример
В этом примере методы AppendChunk и GetChunk используются для заполнения поля объекта OLE данными из другой записи( 32 КБ за раз). В реальном приложении можно использовать подобную процедуру для копирования записи сотрудника (включая фотографию сотрудника) из одного стола в другой. В этом примере запись просто копируется обратно в ту же таблицу. Обратите внимание, что все операции с блоками происходят в одной последовательности AddNew-Update.
Sub AppendChunkX()
Dim dbsNorthwind As Database
Dim rstEmployees As Recordset
Dim rstEmployees2 As Recordset
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
' Open two recordsets from the Employees table.
Set rstEmployees = _
dbsNorthwind.OpenRecordset("Employees", _
dbOpenDynaset)
Set rstEmployees2 = rstEmployees.Clone
' Add a new record to the first Recordset and copy the
' data from a record in the second Recordset.
With rstEmployees
.AddNew
!FirstName = rstEmployees2!FirstName
!LastName = rstEmployees2!LastName
CopyLargeField rstEmployees2!Photo, !Photo
.Update
' Delete new record because this is a demonstration.
.Bookmark = .LastModified
.Delete
.Close
End With
rstEmployees2.Close
dbsNorthwind.Close
End Sub
Function CopyLargeField(fldSource As Field, _
fldDestination As Field)
' Set size of chunk in bytes.
Const conChunkSize = 32768
Dim lngOffset As Long
Dim lngTotalSize As Long
Dim strChunk As String
' Copy the photo from one Recordset to the other in 32K
' chunks until the entire field is copied.
lngTotalSize = fldSource.FieldSize
Do While lngOffset < lngTotalSize
strChunk = fldSource.GetChunk(lngOffset, conChunkSize)
fldDestination.AppendChunk strChunk
lngOffset = lngOffset + conChunkSize
Loop
End Function