Шаг 110 - Свойство UpdateOptions

Описание
Задает или возвращает значение, указывающее, как конструируется предложение WHERE для каждой записи в операции пакетного обновления, а также следует ли в операции пакетного обновления использовать инструкцию UPDATE или инструкцию DELETE с последующей инструкцией INSERT (только в рабочей области ODBCDirect).

Значение
Задаваемое или возвращаемое значение имеет тип данных Long и определяется с помощью следующих констант:

Замечания
При выполнении метода Update в пакетном режиме механизм объектов доступа к данным (DAO) и библиотека пакетных указателей клиента создают для выполнения требуемых изменений набор инструкций UPDATE языка SQL. Для каждого обновления создается предложение WHERE, чтобы изолировать записи, которые отмечены как измененные с помощью свойства RecordStatus. Поскольку некоторые удаленные серверы используют триггеры или другие средства обеспечения целостности данных, часто важно ограничить обновляемые поля только теми, которые затрагиваются изменениями. Для этого следует задать в свойстве UpdateOptions одну из следующих констант: dbCriteriaKey,dbCriteriaModValues, dbCriteriaAllCols или dbCriteriaTimeStamp. Это обеспечивает выполнение абсолютно минимального количества программ триггеров. В результате, операция обновления выполняется быстрее с потенциально меньшим количеством ошибок.
Допускается также комбинирование этих констант с константой dbCriteriaDeleteInsert или dbCriteriaUpdate. Последние определяют для каждого обновления либо использование пары инструкций SQL DELETE и INSERT, либо инструкции UPDATE при отправке пакета обновлений на сервер. В первом случае для обновления записи требуются две отдельные операции. В некоторых случаях, в особенности при реализации на удаленной системе триггеров DELETE, INSERT и UPDATE, выбор правильного параметра UpdateOptions позволяет существенно повысить быстродействие.
Если пользователь не задал ни одну из констант, по умолчанию используются константы dbCriteriaUpdate и dbCriteriaKey.
Для новых добавленных записей всегда генерируются инструкции INSERT, а при удалении записей всегда генерируются инструкции DELETE, поэтому данное свойство влияет только на обновления измененных записей библиотекой указателей.

Пример
Следующая программа использует свойства BatchSize и UpdateOptions для управления операциями пакетного обновления указанного объекта Recordset.

Sub BatchSizeX()

	Dim wrkMain As Workspace
	Dim conMain As Connection
	Dim rstTemp As Recordset

	Set wrkMain = CreateWorkspace("ODBCWorkspace", 	"admin", "", dbUseODBC)
	' Это значение свойства DefaultCursorDriver 
	' требуется для пакетного обновления.
	wrkMain.DefaultCursorDriver = dbUseClientBatchCursor
	Set conMain = wrkMain.OpenConnection("Publishers", dbDriverNoPrompt, False, 	"ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")

	' Следующее значение аргумента блокировки
	' требуется для пакетного обновления.
	Set rstTemp = conMain.OpenRecordset( "SELECT * FROM roysched", dbOpenDynaset, 0, dbOptimisticBatch)
	With rstTemp
		' Увеличивает число инструкций, отправляемых на сервер
		' в одной операции пакетного обновления, что приводит
		' к уменьшению количества обращений к серверу.
		.BatchSize = 25

		' Изменяет значение свойства UpdateOptions таким образом,
		' чтобы предложение WHERE любой инструкции в пакете, 
		' отправленном на сервер включало все обновляемые
		' столбцы в дополнение к ключевым столбцам. Кроме того,
		' любые изменения записей выполняются путем удаления
		' исходной записи и добавления измененной версии записи 
		' вместо простого изменения исходной записи.
		.UpdateOptions = dbCriteriaModValues + 	dbCriteriaDeleteInsert
		' Выполняет пакетное обновление с использованием
		' заданных выше настроек.
		' ...
		.Close
	End With

	conMain.Close
	wrkMain.Close

End Sub

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