Работа с транзакциями
Только создание пустых баз данных определенно недостаточно для работы сРСУБД. Мы хотим иметь возможность создавать в базе данных различныеобъекты (например, таблицы и т. д.) и вставлять данные в эти таблицы. ВFirebird любая операция с базой данных выполняется под управлениемтранзакций. Поэтому прежде всего мы должны научиться стартоватьтранзакцию. Здесь мы не обсуждаем распределенные транзакции(поддерживаемые интерфейсом IDtc
), чтобыизбежать ненужных для большинства пользователей сложностей. Запуск нераспределенной транзакции очень прост и выполняется через интерфейсподключения:
ITransaction* tra = att->startTransaction(&status, 0, NULL);
В этом примере используются параметры транзакции по умолчанию — TPB непередается методу startTransaction()
. Если вам нужна транзакция спараметрами отличными от параметров по умолчанию, вы можете создатьсоответствующий IXpbBuilder
идобавить к нему необходимые элементы:
IXpbBuilder* tpb = utl->getXpbBuilder(&status, IXpbBuilder::TPB, NULL, 0);
tpb->insertTag(&status, isc_tpb_read_committed);
и передать готовый TPB в startTransaction()
:
ITransaction* tra = att->startTransaction(&status, tpb->getBufferLength(&status),
tpb->getBuffer(&status));
Интерфейс транзакции используется как параметр во множестве другихвызовах API, но сам он не выполняет никаких действий, кромефиксации/отката (commit/rollback) транзакции, может быть с сохранениемконтекста транзакции (retaining):
tra->commit(&status);
Вы можете посмотреть, как начинать и подтверждать транзакцию в примерах01.create.cpp
и 01.create.pas
.