- •Программируемый доступ к базе данных
- •Доступ к файлам баз данных
- •Поиск данных в файле
- •Изменение данных в файле
- •Графические возможности Delphi
- •Графические элементы
- •Рисование графиков функций
- •Компоненты tPaintBox и tShape
- •Исключительные ситуации
- •Обработка исключительных ситуаций
- •Обработка определенных исключительных ситуаций
- •Заключение
- •Контрольные вопросы
- •Литература
- •Содержание
Обработка определенных исключительных ситуаций
Причина возникновения исключительных ситуаций может быть самой различной. В больших и сложных программах было бы целесообразно более точно определить причину возникновения исключительной ситуации и сообщить об этом пользователю. При запуске приложения из Delphi это делается автоматически. Обратите внимание на текст сообщения на рис. 9.2.: “Exception class EConvertError with Message ‘ ‘rtrt’ is not a valid integer value’ “. Нам сообщают, что возник класс исключения EConvertError (ошибка преобразования) и это вызвало сообщение о том, что
Поставим задачу: обеспечить определение класса исключительной ситуации и при запуске приложения из операционной системы. Некоторые классы исключительных ситуаций Delphi приведены в табл. 9.1. Полный перечень можете узнать традиционным способом.
Класс ИС |
Описание |
EBreakPoint |
В программе имеется точка прерывания |
EConvertError |
Ошибка преобразования (см. последний пример) |
EDivByZero |
Деление целого числа на нуль |
EInOutError |
Ошибка файлового ввода/вывода |
EIntOverFlow |
Переполнение целочисленного значения |
EInvalidCast |
Недопустимое приведение типов |
EInvalidOp |
Недопустимая математическая операция с плавающей точкой |
EOutOfMemory |
Невозможно выделить память требуемого объема |
EOverflow |
Переполнение значения с плавающей точкой |
ERangeError |
Значение за пределами диапазона допустимых значений |
EUnderflow |
Потеря значимости в выражении с плавающей точкой (слишком малое значение) |
EZeroDivide |
Деление числа с плавающей точкой на нуль |
Для иллюстрации рассмотрим простую программу с преобразованиями и вычислениями. Приложение содержит одну форму и два модуля. Для экономии места приведем лишь реализацию кнопки запуска вычислений и полностью модуль вычислений. Остальное читателю должно быть понятно из предыдущего изложения:
procedure TForm1.Button1Click(Sender: TObject);
Var
Res :real;
Rida :string;
begin
{Вызов процедуры, передача исходных данных, получение результата}
mina(Edit1.Text,Edit2.Text,Edit4.Text,res);
{Вывод результата}
rida:=FloatToStr(res);
Edit3.Text:=rida;
end;
unit mod2;
interface
procedure mina(s1,s2,s3:string; var r:real);
implementation
{Для обеспечения вызова стандартных процедур и функций}
uses SysUtils, Dialogs;
procedure mina(s1,s2,s3:string; var r:real);
Var
i,j,k :shortint;
p,q :real;
begin
{Начинается защищенная часть,}
{при выполнении возможны исключительные ситуации}
try
i:=StrToInt(s1);
j:=StrToInt(s2);
p:=StrToFloat(s3);
k:=i*j*100;
r:=sqrt(i*j);
q:=p/i;
except {Обработка исключительных ситуаций}
on EInvalidOp do ShowMessage ('Недопустимая операция');
on ERangeError do
ShowMessage ('Значение за пределами допустимых границ');
on EConvertError do ShowMessage(’Исходные данные не возможно преобразовать в числа');
on EZeroDivide do begin
ShowMessage('Деление на нуль');
q:=0;
end;
else ShowMessage ('Не удалось определить причину преры- вания');
end;
end;
end.
В приведенном примере показано программирование реакций на различные исключительные ситуации. В большинстве случаев мы ограничились выводом сообщения о ней, но в принципе возможно и преодоление ее последствий, например, присвоением значения по умолчанию (q:=0;).