Описание
Возвращает число записей, которые не были обновлены в последней операции пакетного обновления (только в рабочей области ODBCDirect).
Значение
Возвращаемое значение имеет тип данных Long и указывает число записей, которые не были обновлены, или 0, если были успешно обновлены все записи.
Замечания
Данное свойство показывает, для какого количества записей возникали конфликты обновления или другие причины, не позволившие обновить записи, во время последней попытки пакетного обновления. Значение данного свойства соответствует числу закладок, указанному в свойстве BatchCollisions.
Если задать в свойстве Bookmark рабочего объекта Recordset значения закладок из массива BatchCollisions, то можно будет перейти на каждую запись, которая не была обновлена во время последней пакетной операции Update.
После исправления записей, испытавших конфликты обновления, можно снова вызвать метод Update в пакетном режиме. В этот момент механизм DAO предпримет новую попытку пакетного обновления, а свойство BatchCollisions снова будет определять набор записей, которые не были обновлены во второй попытке. Любые записи, успешно обновленные в предыдущей попытке, не будут участвовать в новой попытке, поскольку теперь их свойство RecordStatus будет определяться константой dbRecordUnmodified. Этот процесс может продолжаться и далее, пока не будут разрешены все возникающие конфликты, или до отказа пользователя от попыток обновления и закрытия результирующего набора записей.
Пример
Следующая программа использует свойство BatchCollisionCount и метод Update для демонстрации пакетного обновления, при котором любые конфликты обновления устраняются путем принудительного пакетного обновления.
Sub BatchX() Dim wrkMain As Workspace Dim conMain As Connection Dim rstTemp As Recordset Dim intLoop As Integer Dim strPrompt As String 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 ' Изменяет данные в локальном наборе записей. Do While Not .EOF .Edit If !royalty <= 20 Then !royalty = !royalty - 4 Else !royalty = !royalty + 2 End If .Update .MoveNext Loop ' Попытка пакетного обновления. .Update dbUpdateBatch ' Если имеются конфликты обновления, пользователю ' предоставляется возможность выбрать ' принудительное обновление или разрешение ' конфликтов по отдельности. If .BatchCollisionCount > 0 Then strPrompt = "Обнаружены конфликты. " & vbCr & "Вызвать программу принудительного " & vbCr & "обновления с помощью локальных данных?)" If MsgBox(strPrompt, vbYesNo) = vbYesNo Then .Update dbUpdateBatch, True End If .Close End With conMain.Close wrkMain.Close End Sub