Иллюстрированный самоучитель по Microsoft Access 2002

Выполнение транзакций

Транзакцией называется операция обмена данными между клиентом и сервером. Методы объекта Workspace, использующиеся для выполнения транзакций, представлены в табл. 16.7.

Таблица 16.7. Методы объекта Workspace для выполнения транзакций.

Метод Описание
BeginTrans Обозначает начало транзакции. Транзакции могут быть вложенными
CommitTrans Обозначает конец транзакции. В этот момент все изменения сохраняются в источнике без возможности их отмены
RollBack Завершение транзакции и отмена результата ее выполнения. Записи в источнике возвращаются в прежнее состояние, отмеченное командой BeginTrans

Все базы данных, открытые в рабочей области, имеют общую область действия транзакций. Это значит, что действие методов BeginTrans, CommitTrans и RollBack объекта Workspace распространяется на все базы данных в семействе Databases объекта Workspace.

Рассмотрим пример программы на VBA с использованием механизма выполнения транзакций (программа 16.11). В приложении "Игра в доминирование" механизм транзакций не используется.

Программа 16.11. Применение механизма транзакций

Sub ResetCount()
Dim ws As Workspace
Dim db As Database
Dim rs As Recordset
Dim flnTrans As Boolean
On Error GoTo errHandler;..
flnTrans = False 'Транзакция еще не началась
Set ws = DBEngine.Workspaces(0)
Set db = CurrentDb
Set rs = db.OpenRecordset("Игроки", dbOpenTable)
ws.BeginTrans 'Начало транзакции
flnTrans = True 'Транзакция началась
rs.MoveFirst
Do Until rs.EOF
rs.Edit
rs!Счет = 0
rs.Update
rs.MoveNext
Loop If
MsgBox("Сохранить сделанные изменения?", vbQuestion + vbYesNo, "Вопрос") = vbYes Then
ws.CommitTrans 'Сохранить изменения 
Else
ws.Rollback 'Отменить изменения
End If
exitHandle: rs.Close
Set db = Nothing
Set ws = Nothing
Exit Sub errHandler:
    MsgBox "Ошибка!"
'Если ошибка возникла в процессе выполнения транзакции,
'отменяем сделанные изменения
If flnTrans Then
ws.Rollback
End If
Resume exitHandle
End Sub
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.