Propriedade Recordset.BatchCollisionCount (DAO)
Aplica-se ao: Access 2013, Office 2013
Sintaxe
expressão . BatchCollisionCount
expressão Uma variável que representa um objeto do Recordset.
Comentários
Essa propriedade indica quantos registros encontraram colisões ou falharam na atualização durante a última tentativa de atualização em lotes. O valor dessa propriedade corresponde ao número de indicadores na propriedade BatchCollisions.
Se você definir trabalhar com a propriedade Bookmark do objeto Recordset para indicar valores na matriz BatchCollisions, poderá mover-se para cada registro com falha para concluir a operação Update mais recente no modo em lote.
Depois que os registros de colisão são corrigidos, você pode chamar novamente o método Update no modo em lote. Nesse momento, o DAO tenta outra atualização em lote, e a propriedade BatchCollisions reflete novamente o conjunto de registros que falharam na segunda tentativa. Os registros bem-sucedidos na tentativa anterior não são enviados para a tentativa atual, pois eles têm agora uma propriedade RecordStatus de dbRecordUnmodified. Esse processo pode continuar até não haver mais colisões ou até você parar as atualizações e fechar a definição de resultados.
Exemplo
Este exemplo usa a propriedade BatchCollisionCount e o método Update para demonstrar a atualização em lote onde todas as colisões são resolvidas pela imposição da atualização em lote.
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