powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Объясните, пожалуйста, применение TRY...CATCH
9 сообщений из 9, страница 1 из 1
Объясните, пожалуйста, применение TRY...CATCH
    #35582554
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леди и джентльмены!
Пожалуйста, объясните, как применять конструкцию TRY...CATCH. Я хочу сделать так, чтобы при попытке записать уже открытый файл в EXCEL выдавалось сообщение, а моя форма закрывалась. Пробовала так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
TRY 
CATCH =.t.
=MESSAGEBOX("Закройте EXCEL!", 48 ) '
thisform.Release()

m.loExcel = GETOBJECT("", "Excel.Application")   && Создаю ссылку на Excel
m.loExcel.DisplayAlerts = .F.   && Отключаю служебные сообщения Excel
m.loExcel.WorkBooks.Open("c:\PPS\Shablon\sh_sort.xls")   && Открываю шаблон
.................................
ENDTRY
Благодарю
...
Рейтинг: 0 / 0
Объясните, пожалуйста, применение TRY...CATCH
    #35582591
Между try и catch делается попытка выполнить потенциально опасное действие, между catch и endtry делаются действия в случае ошибки при вполнении первого блока.
...
Рейтинг: 0 / 0
Объясните, пожалуйста, применение TRY...CATCH
    #35582701
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, все работает, не как я хотела, даже не знаю, лучше ли это получается.
Вместо ожидаемого мною закрытия формы после применения TRY...CATCH просто выдается сообщение "Зактройте EXCEL!", нажимаем ОК, программа продолжает работу, происходит подсчет, после чего открывается в экселе второй документ с тем же отчетом. Это, конечно, намного лучше, нежели системное сообщение, срыв работы программы и оставшийся в резидентах Excel, который можно закрыть только через Диспетчер файлов. С другой стороны нерадивый и невнимательный пользователь может расплодить кучу этих екселевских документов.
Почему не произошло закрытие формы по команде thisform.Release() ?
...
Рейтинг: 0 / 0
Объясните, пожалуйста, применение TRY...CATCH
    #35582706
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Лисонька

+ к ответу

это используют для локальной обработки ошибки

к примеру:
в приложении есть глоб-я обработка (on error)
у нас есть код, в котором есть место, в котором
может произойти ошибка и мы не желаем, чтобы
отработал глоб-й обработчик

такой код мы оборачиваем в трай
и сами либо игнорируем ош-ку, либо что-то выполняем, либо опять-же
зовем глоб-й обработчик ...
...
Рейтинг: 0 / 0
Объясните, пожалуйста, применение TRY...CATCH
    #35582724
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Лисонька

из трая нельзя выполнять ретурн

попробуйте написать так


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
local llSuccess
try
   ttttttt ...
   llSuccess = .t.
catch
endtry
if !llSuccess
  thisform.release()
endif

...
Рейтинг: 0 / 0
Объясните, пожалуйста, применение TRY...CATCH
    #35582735
В дополнение к написанному:
Лисонька
Код: plaintext
1.
2.
TRY 
CATCH =.t.
ENDTRY

CATCH - зарезервированное слово. Отделяет попытку выполнить опасное действие от обработки ошибки выполнения такого опасного действия. НЕ НАДО его применять для имени переменной. Удивительно, что у фокса на таком тексте крыша не съехала.
...
Рейтинг: 0 / 0
Объясните, пожалуйста, применение TRY...CATCH
    #35582786
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходящий.В дополнение к написанному:
Лисонька
Код: plaintext
1.
2.
TRY 
CATCH =.t.
ENDTRY

CATCH - зарезервированное слово. Отделяет попытку выполнить опасное действие от обработки ошибки выполнения такого опасного действия. НЕ НАДО его применять для имени переменной. Удивительно, что у фокса на таком тексте крыша не съехала.
)))
Это я пыталась вопротить в жизнь примечание из Hеlp'a:
"Если вы желаете иметь структуру TRY...CATCH...FINALLY, которая будет отлавливать все ошибки, то убедитесь в том, что ваш оператор CATCH будет всегда оцениваться в True (.T.)."
...
Рейтинг: 0 / 0
Объясните, пожалуйста, применение TRY...CATCH
    #35582797
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хоршо, что есть этот форум.
Благодарю всех, всех, всех!

Елизавета Скрунскайте
...
Рейтинг: 0 / 0
Объясните, пожалуйста, применение TRY...CATCH
    #35583128
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛисонькаХоршо, что есть этот форум.
Благодарю всех, всех, всех!

Елизавета Скрунскайте
А еще лучше создать свой объект класса Exception, в нем сдеалать все, что надо для обработки ошибки (запись в лог, формирование своего текста ошибки и пр.) и в CATCH его вызвать через THROW CREATEOBJECT("myException")
Все это подробно показана в HELP
С уважением, Алексей
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Объясните, пожалуйста, применение TRY...CATCH
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]