Поделиться через


Свойство Recordset.BatchCollisionCount (DAO)

Область применения: Access 2013, Office 2013

Синтаксис

expression . BatchCollisionCount

expression: переменная, представляющая объект Recordset.

Примечания

Это свойство указывает, сколько записей столкнулось с конфликтами или каким-либо иным образом не удалось обновить во время последней попытки пакетного обновления. Значение этого свойства соответствует количеству закладок в свойстве BatchCollisions .

Если в свойстве Bookmark рабочего объекта Recordset заданы значения закладки в массиве BatchCollisions, можно перейти к каждой записи, которая не завершила последнюю операцию пакетного обновления.

После исправления записей о конфликте можно снова вызвать метод 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) 
 ' 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