Пример обработки исключений Назад В начало Вперед
//*************************************************************************
interface ExceptionTest 'Тестирования (система исключений)' EscClose, Cyan;

create view

as select
  *

from
  Abonents
;

File aFile;

exception ExBeokall;

exception ExBeAllOk (ExBeOkAll), ExStop;

//-------------------------------------------------------------------------
procedure ExceptionsInVip;
begin
 _try {
	Message ('Счас будет исключение',0);
	delete from Abonents
	where Abonents.OfficeNo = 0;
	Abonents.OfficeNo:= 0;
	insert Abonents;
	insert Abonents;
 }
 _except
   on ExDataBase : Message ('Исключение ExDataBase',0);
 _finally
   Message ('Выход после обработки исключения',0);
end;

//-------------------------------------------------------------------------
procedure ExceptionsFile;
begin
  _try {
	aFile.OpenFile ('c:\12345\777.999', stCreate);
	Message ('НЕ ДОЛЖНО БЫТЬ (Работа в _try-блоке после исключения) 1',0);
   }
  _except
   on ExPathNotFound : Message ('1. Нормально (Исключение ExPathNotFound)',0);
   on ExFile		 : Message ('НЕ ДОЛЖНО БЫТЬ (Исключение ExFile) 1',0);
  _finally
	aFile.Close;

  DeleteFile ('c:\777.999');

  _try {
	aFile.OpenFile ('c:\777.999', stOpenRead);
	Message ('НЕ ДОЛЖНО БЫТЬ (Работа в _try-блоке после исключения) 2',0);
  }
  _except
	on ExFileNotFound : Message ('2. Нормально (Исключение ExFileNotFound)',0);
	on ExFile		 : Message ('НЕ ДОЛЖНО БЫТЬ (Исключение ExFile) 2',0);
  _finally
	aFile.Close;

  _try {
	aFile.OpenFile ('c:\777.999', stCreate);
	Message ('3. Нормально (Create файл "c:\777.999")',0);
	aFile.writeln ('Проверка записи');
	Message ('4. Нормально (запись строки)',0);
	aFile.seek (0);
	Message ('5. Нормально (seek)',0);
	var aStr : String;
	aFile.Readln (aStr);
	Message ('6. Нормально (readln)',0);
	if aStr <> 'Проверка записи' then
	Message ('НЕ ДОЛЖНО БЫТЬ (прочиталась не та строка) 4',0);
	var l : Integer;
	Message ('Счас будет исключение',0);
	aFile.Read (l);
	Message ('НЕ ДОЛЖНО БЫТЬ (ожидалось исключение) 5',0);
  }
  _except
	on ExFileReadError : Message ('7. Нормально (Исключение ExFileReadError)',0);
	on ExFile	: Message ('НЕ ДОЛЖНО БЫТЬ (Исключение ExFile) 3',0);
  _finally {
	 aFile.Close;
	 DeleteFile ('c:\777.999');
  };

  _try {
	aFile.OpenFile ('c:\777.999', stOpen);
	aFile.seek (aFile.GetSize);
	Message ('9. Нормально (файл создан и открыт)',0);
  }
  _except
	on ExFileNotFound : {
	aFile.OpenFile ('c:\777.999', stCreate);
	Message ('8. Нормально (Исключение ExFileNotFound)',0);
	_Retry;
};
	on ExFile:
	Message ('НЕ ДОЛЖНО БЫТЬ (Исключение ExFile) 4',0);
  _finally {
	aFile.Close;
	DeleteFile ('c:\777.999');
  };
end;

//-------------------------------------------------------------------------
handleEvent

cmInit:
{
  Message ('Test!',0);
  ExceptionsFile;
  ExceptionsInVip;
  Message ('Тест прошел !',0);
};
end; // handleevent

end. // Interface AbonentsDebug