Описание
Задает или возвращает значение, указывающее, как конструируется предложение 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