Usar transações em um Conjunto de Registros de DAO

Uma transação é um conjunto de operações agrupadas e tratados como uma única unidade de trabalho. O trabalho em uma transação que deve ser concluído como um todo; Se qualquer parte da transação falhar, toda a transação falha. As transações oferecem ao desenvolvedor a capacidade de impor integridade dos dados. Com vários operações de banco de dados agrupadas em uma única unidade que deve falhar ou obter êxito como um todo, o banco de dados não atingirá um estado inconsistente. As transações são comuns a maioria dos sistemas de gerenciamento de banco de dados.

O exemplo mais comum de processamento de transação envolve um caixa eletrônico. Os processos de liberar dinheiro e debitar a conta do usuário são considerados uma unidade lógica do trabalho e são agrupados em uma transação: o dinheiro não será liberado se o sistema não puder debitar a conta. Ao usar uma transação, a operação inteira falha ou obtém êxito. Isso mantém o estado consistente do banco de dados do caixa eletrônico.

Você deve considerar o uso de transações para verificar se cada operação de um grupo foi bem-sucedida antes de todas as operações serem confirmadas. Lembre-se de que todas as transações são invisíveis para as demais. Ou seja, nenhuma transação pode ver as atualizações de outra no banco de dados até ser confirmada.

Observação

[!OBSERVAçãO] O comportamento das transações com bancos de dados do Access difere do comportamento de fontes de dados ODBC, como o SQL Server. Por exemplo, se um banco de dados está conectado a um servidor de arquivos e o servidor de arquivos pára antes de uma transação teve tempo para confirmar suas alterações, então seu banco de dados poderia ser deixado em um estado inconsistente. Se precisar de suporte de transação true com relação à durabilidade, investigue usando uma arquitetura de cliente/servidor.

O mecanismo de banco de dados access dá suporte a transações por meio dos métodos DAO BeginTrans, CommitTrans e Rollback do objeto Workspace .

O exemplo de código a seguir altera o cargo de todos os representantes de vendas na tabela Funcionários. Depois que o método BeginTrans inicia uma transação que isola todas as alterações feitas na tabela Funcionários, o método CommitTrans salva as alterações. Lembre-se de que você pode usar o método Rollback para desfazer alterações salvas com o método Update.

Sub ChangeTitle() 
 
Dim wrkCurrent As DAO.Workspace 
Dim dbsNorthwind As DAO.Database 
Dim rstEmployee As DAO.Recordset 
 
On Error GoTo ErrorHandler 
 
   Set wrkCurrent = DBEngine.Workspaces(0) 
   Set dbsNorthwind = CurrentDB 
   Set rstEmployee = dbsNorthwind.OpenRecordset("Employees") 
 
   wrkCurrent.BeginTrans 
   Do Until rstEmployee.EOF 
      If rstEmployee!Title = "Sales Representative" Then 
         rstEmployee.Edit 
         rstEmployee!Title = "Sales Associate" 
         rstEmployee.Update 
      End If 
      rstEmployee.MoveNext 
   Loop 
 
   If MsgBox("Save all changes?", vbQuestion + vbYesNo) = vbYes Then 
      wrkCurrent.CommitTrans 
   Else 
      wrkCurrent.Rollback 
   End If 
 
   rstEmployee.Close 
   dbsNorthwind.Close 
   wrkCurrent.Close 
 
   Set rstEmployee = nothing 
   Set dbsNorthwind = Nothing 
   Set wrkCurrent = Nothing 
 
   Exit Sub 
 
ErrorHandler: 
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description 
End Sub

Quando você usa transações, todos os bancos de dados e os objetos Recordset no objeto Workspace especificado são afetados; as transações são globais no espaço de trabalho e não em um banco de dados ou Recordset específico. Se você executar operações em mais de um banco de dados ou em uma transação do espaço de trabalho, os métodos Commit e Rollback afetarão todos os objetos alterados nesse espaço de trabalho durante a transação.

Você também pode usar os métodos BeginTrans, CommitTrans e Rollback com o objeto DBEngine. Nesse caso, a transação será aplicada ao espaço de trabalho padrão, que é DBEngine.Workspaces(0).

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.