C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 10 - Транзакции / DAO / Visual C++

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

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

  • CDaoWorkspace::BeginTrans - вызывается на выполнении транзакции.
  • CDaoWorkspace::CommitTrans - подтверждении транзакции.
  • CDaoWorkspace::Rollback - отмена транзакции.

После запуска транзакции с помощью 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;
}

| |
Автор Каев Артем.
[AD]