Поделиться через


Метод Field2.GetChunk (DAO)

Область применения: Access 2013, Office 2013

Возвращает все или часть содержимого объекта Memo или Long BinaryField2 в коллекции Fields объекта Recordset .

Синтаксис

expression . GetChunk(Offset, Bytes)

expression — переменная, представляющая объект Field2.

Параметры

Имя

Обязательный/необязательный

Тип данных

Описание

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 Field2, _ 
     fldDestination As Field2) 
     
     ' 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