Свойство Recordset2.BatchCollisionCount (DAO)
Область применения: Access 2013, Office 2013
Синтаксис
expression . BatchCollisionCount
Выражение Переменная, представляющая объект Recordset2 .
Замечания
Это свойство указывает, сколько записей столкнулось с конфликтами или каким-либо иным образом не удалось обновить во время последней попытки пакетного обновления. Значение этого свойства соответствует количеству закладок в свойстве BatchCollisions .
Если в свойстве Bookmark рабочего объекта Recordset заданы значения закладки в массиве BatchCollisions, можно перейти к каждой записи, которая не завершила последнюю операцию пакетного обновления.
После исправления записей о конфликте можно снова вызвать метод Update в пакетном режиме. На этом этапе DAO пытается выполнить еще одно пакетное обновление, а свойство BatchCollisions снова отражает набор записей, которые не удалось выполнить вторую попытку. Все записи, успешно выполненные при предыдущей попытке, не отправляются в текущей попытке, так как теперь у них есть свойство RecordStatusdbRecordUnmodified. Этот процесс может продолжаться до тех пор, пока возникают конфликты или пока вы не откажете от обновлений и не закроете результирующий набор.
Пример
В этом примере используются свойство BatchCollisionCount и метод Update, чтобы продемонстрировать пакетное обновление с разрешением всех конфликтов путем принудительного пакетного обновления.
Sub BatchX()
Dim wrkMain As Workspace
Dim conMain As Connection
Dim rstTemp As Recordset2
Dim intLoop As Integer
Dim strPrompt As String
Set wrkMain = CreateWorkspace("ODBCWorkspace", _
"admin", "", dbUseODBC)
' This DefaultCursorDriver setting is required for
' batch updating.
wrkMain.DefaultCursorDriver = dbUseClientBatchCursor
' Note: The DSN referenced below must be configured to
' use Microsoft Windows NT Authentication Mode to
' authorize user access to the Microsoft SQL Server.
Set conMain = wrkMain.OpenConnection("Publishers", _
dbDriverNoPrompt, False, _
"ODBC;DATABASE=pubs;DSN=Publishers")
' The following locking argument is required for
' batch updating. It is also required that a table
' with a primary key is used.
Set rstTemp = conMain.OpenRecordset( _
"SELECT * FROM roysched", dbOpenDynaset, 0, _
dbOptimisticBatch)
With rstTemp
' Modify data in local recordset.
Do While Not .EOF
.Edit
If !royalty <= 20 Then
!royalty = !royalty - 4
Else
!royalty = !royalty + 2
End If
.Update
.MoveNext
Loop
' Attempt a batch update.
.Update dbUpdateBatch
' If there are collisions, give the user the option
' of forcing the changes or resolving them
' individually.
If .BatchCollisionCount > 0 Then
strPrompt = "There are collisions. " & vbCr & _
"Do you want the program to force " & _
vbCr & "an update using the local data?"
If MsgBox(strPrompt, vbYesNo) = vbYes Then _
.Update dbUpdateBatch, True
End If
.Close
End With
conMain.Close
wrkMain.Close
End Sub