Compartilhar via


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