Шаг 134 - Метод AppendChunk

Описание
Добавляет данные из строкового выражения в объект Field (поле) типа Memo или Long Binary в объекте Recordset.

наборЗаписей ! поле.AppendChunk источник

Параметры
наборЗаписей
Объектная переменная, задающая объект Recordset, который содержит нужное семейство Fields.
поле
Объектная переменная, задающая имя объекта Field, свойство Type которого имеет значение dbMemo (Memo), dbLongBinary (Long Binary) или эквивалентное.
источник
Выражение или переменная типа Variant (подтип String), содержащие данные, которые необходимо добавить в объект Field, определяемый аргументом поле.

Замечания
Методы AppendChunk и GetChunk применяются для доступа к фрагментам данных в полях типа Memo или Long Binary.
Кроме того, эти методы используются для экономии пространства, отведенного для записи строк при работе с полями Memo и Long Binary. Некоторые операции (например, копирование) выполняются с применением временных строк. Если объем памяти ограничен, то экономнее работать не с целыми полями, а с их фрагментами.
Если при вызове метода AppendChunk текущая запись не определена, возникает ошибка.
При первом вызове метода AppendChunk (после вызова метода Edit или AddNew) содержимое поле заменяется на значение строкового выражения. Добавление строкового выражения к содержимому поля осуществляется при последующих вызовах AppendChunk в рамках сеанса редактирования, открытого в одном методе Edit или AddNew.
В рабочей области ODBCDirect, если ранее не было изменено поле в текущей записи, вызвать метод AppendChunk в режиме Edit невозможно (хотя ошибка при этом не возникает).
После вызова метода AppendChunk для поля в рабочей области ODBCDirect чтение или запись в это поле с помощью инструкции присвоения невозможны до выхода из текущей записи и последующего возвращения в нее. Это выполняется с помощью методов MoveNext и MovePrevious.

Пример
Следующая программа использует методы AppendChunk и GetChunk для заполнения поля объекта данными из другой записи, добавляемыми порциями по 32K. В действующем приложении подобная процедура может использоваться для копирования записи о сотруднике (включая фотографию сотрудника) из одной таблицы в другую. В данном примере запись просто копируется в ту же таблицу. Отметим, что все действия с порциями данных выполняются в рамках одной последовательности AddNew-Update.

Sub AppendChunkX()

	Dim dbsNorthwind As Database
	Dim rstEmployees As Recordset
	Dim rstEmployees2 As Recordset

	Set dbsNorthwind = OpenDatabase("Борей.mdb")

	' Открывает два набора записей для таблицы "Сотрудники".
	Set rstEmployees = dbsNorthwind.OpenRecordset("Сотрудники", dbOpenDynaset)
	Set rstEmployees2 = rstEmployees.Clone

	' Добавляет новую запись в первый объект Recordset и 
	' копирует данные из записи во второй объект Recordset.

	With rstEmployees
		.AddNew
		!Имя = rstEmployees2!Имя
		!Фамилия = rstEmployees2!Фамилия
		CopyLargeField rstEmployees2!Фотография, !Фотография
		.Update

		' Удаляет новую запись, созданную только для демонстрации.
		.Bookmark = .LastModified
		.Delete
		.Close
	End With

	rstEmployees2.Close
	dbsNorthwind.Close

End Sub

Function CopyLargeField(fldSource As Field, fldDestination As Field)

	' Задает размер порции данных в байтах.

	Const conChunkSize = 32768

	Dim lngOffset As Long
	Dim lngTotalSize As Long
	Dim strChunk As String

	' Копирует фото из одного объекта Recordset в другой
	' порциями по 32K, пока не будет скопировано все поле.
	lngTotalSize = fldSource.FieldSize
	Do While lngOffset < lngTotalSize
		strChunk = fldSource.GetChunk(lngOffset, conChunkSize)
		fldDestination.AppendChunk strChunk
		lngOffset = lngOffset + conChunkSize
	Loop

End Function

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 31.03.2002