Шаг 10 - Транзакции

Транзакция - это оператор или их набор, которые необходимо выполнить сразу или не выполнять совсем. Ну например, есть серия связанных таблиц по сотрудникам. Вы удаляете сотрудника. Он должен удалиться из всех других таблиц, скажем, расчета зарплаты, данных по кадрам, штатного расписания и так далее. Так вот если Вы в каких-то таблицах этого сделать не можете, то действие должно быть отменено. Есть следующие функции транзакций:

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

Давайте посмотрим описание функций:

void BeginTrans( );
throw( CDaoException, CMemoryException );

void CommitTrans( );
throw( CDaoException, CMemoryException );

void Rollback( );
throw( CDaoException, CMemoryException );

Давайте изменим наш последний код с учетом транзакций. То есть запустим механизм транзакций в начале и спросим о приведении изменений в действие, когда таблица будет сформирована.

try
{
	cw=new CDaoWorkspace(); 
	cd = new CDaoDatabase(cw);
	cf = new CDaoTableDef(cd);
	cd->Open(csBaseName);
	cw->BeginTrans();
	cf->Create(m_TableName); 
	AddField ad;
	ad.SetTableDef(cf); 	
	ad.DoModal(); 
	cf->Append();
	if (AfxMessageBox("Append Table ????",MB_OKCANCEL)==IDCANCEL)
		cw->Rollback();
	else
		cw->CommitTrans();
	cf->Close();  	
	cd->Close(); 
	cw->Close();
	delete cf;
	delete cd;
	delete cw;
}

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.