Поделиться через


Метод DBEngine.BeginTrans (DAO)

Область применения: Access 2013, Office 2013

Начинает новую транзакцию. Чтение и запись базы данных.

Синтаксис

expression . Begintrans

expression: переменная, представляющая объект DBEngine.

Замечания

Методы транзакций BeginTrans, CommitTrans и Rollback управляют обработкой транзакций во время сеанса, определенного объектом Workspace . Эти методы используются с объектом Workspace , если требуется обработать ряд изменений, внесенных в базы данных в сеансе, как один блок.

Как правило, транзакции используются для поддержания целостности данных, если необходимо обновить записи в двух или более таблицах и убедиться, что изменения завершены (зафиксированы) во всех таблицах или ни в одном из них (откат). Например, если вы переводите деньги с одного счета на другой, вы можете вычесть сумму из одного счета и добавить ее к другому. В случае сбоя любого из обновлений учетные записи перестают балансировать. Используйте метод BeginTrans перед обновлением первой записи, а затем в случае сбоя любого последующего обновления можно использовать метод Rollback для отмены всех обновлений. Используйте метод CommitTrans после успешного обновления последней записи.

Примечание.

В пределах одного объекта Workspace транзакции всегда являются глобальными для рабочей области и не ограничиваются только одним объектом Connection или Database . Если вы выполняете операции с несколькими подключениями или базами данных в транзакции рабочей области , разрешение транзакции (то есть с помощью метода CommitTrans или Rollback ) влияет на все операции со всеми подключениями и базами данных в этой рабочей области.

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

Если вы хотите иметь одновременные транзакции с перекрывающимися не вложенными областями, можно создать дополнительные объекты Рабочей области для хранения параллельных транзакций.

Если вы закрываете объект Workspace без разрешения ожидающих транзакций, транзакции автоматически откатываются.

Если вы используете метод CommitTrans или Rollback без использования метода BeginTrans , возникает ошибка.

Некоторые базы данных ISAM, используемые в рабочей области Microsoft Access, могут не поддерживать транзакции. В этом случае свойство Transactions объекта Database или Recordset имеет значение False. Чтобы убедиться, что база данных поддерживает транзакции, проверка значение свойства Transactions объекта Database перед использованием метода BeginTrans. Если вы используете объект Recordset, основанный на нескольких базах данных, проверка свойство Transactions объекта Recordset. Если набор записей полностью основан на таблицах ядра СУБД Microsoft Access, всегда можно использовать транзакции. Однако объекты Recordset на основе таблиц, созданных другими продуктами базы данных, могут не поддерживать транзакции. Например, нельзя использовать транзакции в наборе записей на основе таблицы Paradox. В этом случае свойство Transactions имеет значение False. Если база данных или набор записей не поддерживает транзакции, методы игнорируются и ошибки не возникают.

Нельзя вкладывать транзакции, если вы обращаетесь к источникам данных ODBC через ядро СУБД Microsoft Access.

В рабочих областях ODBC при использовании CommitTrans курсор может оказаться недопустимым. Используйте метод Requery для просмотра изменений в наборе записей или закройте и повторно откройте набор записей.

Примечание.

  • Часто можно повысить производительность приложения, разбивая операции, требующие доступа к диску, в блоки транзакций. Это приведет к буферизации операций и может значительно сократить количество обращений к диску.
  • В рабочей области Microsoft Access транзакции регистрируются в файле, который хранится в каталоге, указанном переменной среды TEMP на рабочей станции. Если файл журнала транзакций исчерпывает доступное хранилище на диске TEMP, ядро СУБД вызывает ошибку во время выполнения. На этом этапе, если вы используете CommitTrans, фиксируется неопределенное количество операций, но остальные незавершенные операции теряются, и операция должна быть перезапущена. При использовании метода Rollback журнал транзакций освобождается и выполняется откат всех операций в транзакции.
  • Закрытие набора записей клона в ожидающей транзакции приведет к неявной операции отката .