Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Транзакция — это набор операций, объединенных вместе и обрабатываемых в виде единой единицы работы. Работа в транзакции должна быть завершена в целом; Если какая-либо часть транзакции завершается ошибкой, вся транзакция завершается ошибкой. Транзакции предоставляют разработчику возможность обеспечить целостность данных. При наличии нескольких операций базы данных, объединенных в одну единицу, которая должна быть успешной или неудачной в целом, база данных не может достичь несогласованного состояния. Транзакции являются общими для большинства систем управления базами данных.
Наиболее распространенным примером обработки транзакций является банкомат банка. Процессы выдачи наличных денег и последующего списания счета пользователя считаются логическим блоком работы и упаковываются в транзакцию: денежные средства не отпускаются, если система также не может дебетировать счет. При использовании транзакции вся операция либо завершается, либо завершается сбоем. Это обеспечивает согласованное состояние базы данных ATM.
Следует рассмотреть возможность использования транзакций, если вы хотите убедиться, что каждая операция в группе операций прошла успешно, прежде чем все операции будут зафиксированы. Помните, что все транзакции невидимы для других транзакций. То есть ни одна транзакция не может видеть обновления другой транзакции в базе данных до тех пор, пока транзакция не будет зафиксирована.
Примечание.
Поведение транзакций с базами данных Access отличается от поведения источников данных ODBC, таких как SQL Server. Например, если база данных подключена к файловму серверу и файловый сервер останавливается до того, как транзакция успеет зафиксировать изменения, то база данных может остаться в несогласованном состоянии. Если требуется реальная поддержка транзакций в отношении устойчивости, следует изучить архитектуру клиента или сервера.
Ядро СУБД Access поддерживает транзакции с помощью методов DAO BeginTrans, CommitTrans и Rollback объекта Workspace .
В следующем примере кода изменяется должность всех торговых представителей в таблице Employees. После того как метод BeginTrans запускает транзакцию, которая изолирует все изменения, внесенные в таблицу Employees, метод CommitTrans сохраняет изменения. Имейте в виду, что для отмены изменений, сохраненных с помощью метода Update, можно использовать метод Rollback.
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
При использовании транзакций затрагиваются все базы данных и объекты Recordset в указанном объекте Workspace ; транзакции являются глобальными для рабочей области, а не для определенной базы данных или набора записей. При выполнении операций с несколькими базами данных или в рамках транзакции рабочей области методы Commit и Rollback влияют на все объекты, измененные в этой рабочей области во время транзакции.
Вы также можете использовать методы BeginTrans, CommitTrans и Rollback с объектом DBEngine . В этом случае транзакция применяется к рабочей области по умолчанию, которая имеет значение DBEngine.Workspaces(0)
.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.