Шаг 20.
Основные компоненты Delphi. Вкладка InterBase.
Управление транзакциями

    На этом шаге мы рассмотрим основные свойства компонента TIBTransaction.

    Необходимо помнить, что любое действие с базой данных происходит в рамках той или иной транзакции. Работа с InterBase основана на явном управлении транзакциями, а поскольку библиотека IBX - это "обертка" вокруг соответствующих функций InterBase API, то использование этих компонентов также предполагает, что программист явным образом будет управлять транзакциями из своего приложения. Для контроля транзакций в IBX существует специальный компонент TIBTransaction (рисунок 1):


Рис.1. Свойства TIBTransaction

    Как видно из рисунка, компонент не слишком перегружен свойствами. Фактически основным является свойство Params, в котором можно указать уровень изоляции транзакции. Для этого необходимо знать соответствующие системные константы из InterBase API. Однако для большинства ситуаций хватит использования одного из четырех заранее заданных уровней изоляции. Для того чтобы выбрать один из них, можно вызвать редактор компонента (рисунок 2).


Рис.2. Вызов редактора TIBTransaction

    В появившемся диалоге можно указать нужный уровень изоляции, а и увидеть сразу, какими константами он задается (рисунок 3).


Рис.3. Редактор TIBTransaction

    Для большинства случаев рекомендуется использовать режим Read Committed, который позволит запросам в одной транзакции "видеть" изменения, сделанные и подтвержденные в контексте других транзакций.

    TIBTransaction ссылается на компонент базы данных при помощи свойства DetaultDatabase. Если также указать свойство DefaultTransaction у TIBDatabase, то в дальнейшем любые компоненты (TIBDataSet, TIBSQL и т.д.), которые ссылаются на TIBDatabase, будут автоматически "подхватывать" и указанную транзакцию.

    Теперь рассмотрим свойства AllowAutoStart и AutoStopAction. Как уже известно, любой запрос к базе данных должен выполняться в контексте транзакции. То есть, прежде чем выполнить даже простейший запрос вида

   SELECT * 
   FROM TABLE1
необходимо предварительно запустить транзакцию при помощи вызова IBTransaction.StartTransaction.

    Такой "ручной" вызов не всегда удобен. Более того, каждый раз совершенно определенно известно: если хотим выполнить запрос, то должны запустить транзакцию. Чтобы избежать лишнего кода, связанного с запуском транзакций, можно установить значение свойства AllowAutoStart равным True. В этом случае если попробуем, например, открыть TIBDataSet, то он сам автоматически запустит соответствующую транзакцию.

    Аналогичный смысл имеет свойство AutoStopAction. Когда закрываем все запросы, выполнявшиеся в контексте автоматически запущенной транзакции, то TIBTransaction выполняет действие, указанное в AutoStopAction. Например, автоматически подтверждает всю транзакцию при помощи метода Commit, если свойство AutoStopAction равно saCommit. Таким образом, разработчику предоставляется возможность указать, как компоненты должны автоматически взаимодействовать друг с другом.

    На следующем шаге мы начнем знакомиться с разработанным приложением.




Предыдущий шаг Содержание Следующий шаг