Главная страница
    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.055 c
2-1338991657
начинающий41
2012-06-06 18:07
2013.03.22
Sender: TObject


15-1332614719
wl
2012-03-24 22:45
2013.03.22
Про коньяк на др. Дубль 2


15-1340312237
Германн
2012-06-22 00:57
2013.03.22
Подскажите есть ли в каком-нибудь стандартном шрифте в WinXP


15-1344537298
kilkennycat
2012-08-09 22:34
2013.03.22
Бибик


3-1250742438
pushkin42
2009-08-20 08:27
2013.03.22
dbExpress не открывает личико...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский