Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.20;
Скачать: CL | DM;

Вниз

try except   Найти похожие ветки 

 
Ega23 ©   (2004-01-08 15:49) [0]

procedure SaveTPL(const FileName:String);
var
Ini:TIniFile;
begin
try
Ini:=TIniFile.Create(FileName);
......
Ini.WriteInteger(....);
.....
except
ShowMessage("Error!");
end;
end;

На Ini.WriteInteger(....) происходит ошибка.
Нужно ли в секции except ставить Ini.Free?
Или сам "убъётся"?


 
MBo ©   (2004-01-08 15:51) [1]

Ini.Free нужно ставить в Finally


 
Тимохов ©   (2004-01-08 15:51) [2]

Обязательно нужно!


 
Тимохов ©   (2004-01-08 15:52) [3]

Пардон.
[1] конечно прав, а я что-то сморозил.


 
panov ©   (2004-01-08 15:55) [4]

procedure SaveTPL(const FileName:String);
var
Ini:TIniFile;
begin
try
Ini:=TIniFile.Create(FileName);
except
ShowMessage("Error!");
Exit;
end;
try
......
Ini.WriteInteger(....);
.....
finaly
ini.free;
end;
end;


 
Ega23 ©   (2004-01-08 15:55) [5]

Угу, понятно. Спасибо.


 
Ega23 ©   (2004-01-08 15:57) [6]


> panov © (08.01.04 15:55) [4]

Не,
Ini:=TIniFile.Create(FileName) - тут ошибки быть не может, это до входа в процедуру проверяется. Файл создан, ошибка произошла во время записи в него.


 
panov ©   (2004-01-08 16:01) [7]

>Ega23 © (08.01.04 15:57) [6]
Ini:=TIniFile.Create(FileName) - тут ошибки быть не может, это до входа в процедуру проверяется. Файл создан, ошибка произошла во время записи в него.

Все равно проверяй, ведь процедура может вызываться из нескольких мест. И что, каждый раз будешь проверять до вызова процедуры?


 
Ega23 ©   (2004-01-08 16:02) [8]


> Все равно проверяй, ведь процедура может вызываться из нескольких
> мест. И что, каждый раз будешь проверять до вызова процедуры?

Не, это, фактически, action.
Но идея понятна, спасибо.


 
MV   (2004-01-08 16:11) [9]

procedure SaveTPL(const FileName:String);
var
Ini:TIniFile;
begin
Ini:=TIniFile.Create(FileName);
try

try
......
Ini.WriteInteger(....);
.....
except
ShowMessage("Error!");
end;
finally
Ini.Free
end;
end;
На Ini.WriteInteger(....) происходит ошибка.
Нужно ли в секции except ставить Ini.Free?
Или сам "убъётся"?


 
Daemys ©   (2004-01-08 17:10) [10]

Ini:=TIniFile.Create(FileName) - тут ошибки быть не может

Может, но при возникновении исключения в конструкторе объекта, его деструктор вызывается автоматически, поэтому try всегда пишется после создания объекта, а вот Free надо обязательно вызывать в finally. При это желательно, чтобы одному объекту соответствовал один блок try..except


 
panov ©   (2004-01-08 17:11) [11]

>MV (08.01.04 16:11) [9]

Ставить в
except..end не надо, так как у тебя освобождение выполнится в секции finally..end


 
MV   (2004-01-08 17:12) [12]

Ставить в
except..end не надо, так как у тебя освобождение выполнится в секции finally..end


А ошибки чем обрабатывать?


 
Ega23 ©   (2004-01-08 17:14) [13]


> panov © (08.01.04 17:11) [11]

А разве конструкция
try
.....
except
.....
finally
.....
end;
допускается?


 
MV   (2004-01-08 17:17) [14]

Нет. Повторяю по разделениям:
try
try
......
Ini.WriteInteger(....);
.....
except
ShowMessage("Error!");
end;
finally
Ini.Free
end;


 
Ega23 ©   (2004-01-08 17:19) [15]


> MV (08.01.04 17:17) [14]

Это я понял, сам дошёл ;-)
Просто жаль, что на каждый блок except или finally свой try должен быть.


 
MV   (2004-01-08 17:21) [16]

Что имеем, то имеем.



Страницы: 1 вся ветка

Текущий архив: 2004.01.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
3-63014
vlgrig1961
2003-12-23 08:30
2004.01.20
В чем разница у Оракла между табл. sys.all_tables и sys.dba_table


3-63033
Undert
2003-12-22 12:33
2004.01.20
как организовать SQL запрос


1-63133
Evgeniy_K
2003-12-28 11:31
2004.01.20
183 I/O Error


14-63372
Lord Vader
2003-12-28 08:06
2004.01.20
Нужен алгоритм по выч. математике


14-63390
PRO
2003-12-29 00:19
2004.01.20
Что лучше Delphi или C