Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Try ... finally при выходе из программы   Найти похожие ветки 

 
yurikon   (2012-05-02 18:45) [0]

Добрый день!

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

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

С уважением.


 
Anatoly Podgoretsky ©   (2012-05-02 18:58) [1]

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

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


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


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

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


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

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


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

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


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

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


 
yurikon   (2012-05-03 10:10) [6]

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

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


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



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


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

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


 
Palladin ©   (2012-05-03 11:20) [8]

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


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


> 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].


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

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

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

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

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


 
Anatoly Podgoretsky ©   (2012-05-03 13:50) [11]

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


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


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

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

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


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


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

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


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


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

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


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

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


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

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



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

Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.066 c
15-1339946385
Artem
2012-06-17 19:19
2013.03.22
Откуда-то появился Norton Internet Security


3-1287589173
Grom
2010-10-20 19:39
2013.03.22
БД+КЛиент-сервер(сокеты) DELPHI


15-1352233802
Юрий
2012-11-07 00:30
2013.03.22
С днем рождения ! 7 ноября 2012 среда


6-1257159963
tlm
2009-11-02 14:06
2013.03.22
Webbrowser и координаты мыши


15-1343817068
ProgRAMmer Dimonych
2012-08-01 14:31
2013.03.22
Spurious wakeup в WinSock?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский