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

Транзакцией называется операция обмена данными между клиентом и сервером. Методы объекта 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