Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Try ... finally при выходе из программы [D7]


yurikon ©   (2012-05-02 18:45:00) 

Добрый день!

В обработчике события FormClose главной формы в секции try ... finally выполняю запрос к базе данных. Если сервер возвращает ошибку, то выполнение процедуры прекращается и программа дальше продолжает работать.

Почему в данном случае защитная секция не срабатывает?

С уважением.


yurikon   (2012-05-03 16:25:00) [1]

Сенк за обсуждение! Топик можно закрывать.


Anatoly Podgoretsky   (2012-05-03 15:43:00) [2]

Можно оба выкинуть.


Юрий Зотов   (2012-05-03 15:02:00) [3]


> Приветствую еще раз!
> если сделать два вложенных try ... finally - то форма не будет закрываться.

Хоть сто. Здесь нужен try-except, а не try-finally. Кстати, try-finally можно убрать совсем и оставить только try-except.


Плохиш   (2012-05-03 14:46:00) [4]


> Я раньше думал, что эти конструкции "одинаковые", оказывается
> не совсем!

У конструкций кроме начального try и конечного end больше ничего одинакового нет. В справке всё подробно описано и даже с примерами.


Плохиш   (2012-05-03 14:43:00) [5]


> Хотя если сделать два вложенных try ... finally - то форма
> не будет закрываться.

Да хоть 100500 мильёнов своих try ... finallyнапихай. Всё-равно следующиму обработчику исключительных ситуаций глубоко начхать, что ты там соизволил присвоить переменной Action, он(обработчик) о ней и понятия не имеет.

PS. Программиста нанять здесь уже советовали?


Anatoly Podgoretsky   (2012-05-03 13:50:00) [6]

Приведи код с двумя try ... finally, наверно ошибка там


yurikon   (2012-05-03 13:40:00) [7]

Приветствую еще раз!

Да я прекрасно понимаю, что так нельзя делать. Просто заело - почему не отрабатывает защитная секция.

2 Юрий Зотов:
Ваш пример работает! Хотя если сделать два вложенных try ... finally - то форма не будет закрываться.

Я раньше думал, что эти конструкции "одинаковые", оказывается не совсем!


Юрий Зотов   (2012-05-03 11:49:00) [8]


> yurikon   (03.05.12 10:10) [6]
> нужно в секции try выполнить действия и в не зависимости от того,
> будет там ошибка или нет, завершить программу. Как должен выглядеть
> этот пример в таком случае?

Например, так:

procedure TfmMain.FormClose(Sender: TObject; var Action: TCloseAction);
var
  sl: TSTringList;
begin
 try
   try
     // создаем ошибку доступа к памяти
     sl.Free
   except
     // гасим любое исключение
   end
 finally
   Action := caFree
 end
end;

Но это очень плохой стиль. Прислушайтесь к [8].


Palladin   (2012-05-03 11:20:00) [9]

Надо исправлять ошибки доступа, а не скрывать их при закрытии.


sniknik   (2012-05-03 10:15:00) [10]

Германн ©   (02.05.12 19:04) [2]


yurikon   (2012-05-03 10:10:00) [11]

Что-то я в замешательстве.

Простой пример.


procedure TfmMain.FormClose(Sender: TObject; var Action: TCloseAction);
var
  sl: TSTringList;
begin
 // создаем ошибку доступа к памяти
 try
   sl.Free;
 finally
    Action := caFree;
 end;
end;



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


yurikon   (2012-05-03 09:46:00) [12]

Спасибо за помощь. Не заметил вар параметр Action.


Сергей М.   (2012-05-02 20:41:00) [13]

он срабатывает, даже не сомневайся в этом.
но ты смотришь там где светлее, а не там где лежит.


Медвежонок Пятачок   (2012-05-02 19:32:00) [14]

кто тебе сказал, что код файнали не выполняется?
у тебя вар параметр формклозе остается в фалсе.


Германн   (2012-05-02 19:04:00) [15]


> в секции try ... finally

Может надо было использовать try...except?


Anatoly Podgoretsky   (2012-05-02 18:58:00) [16]

> yurikon  (02.05.2012 18:45:00)  [0]

Возможно ошибка в программе.


Наверх

Титульная страница Поиск, карта сайта Написать письмо