:: Архив конференции по VFP до 2005 года
Обработчик ошибок
melnik

Сообщений: 289
Откуда: г. Владимир
Дата регистрации: 10.04.2003
Всех приветствую !
Наткнулся на одну проблемму , пока не пойму где собака зарыта

Вообщем дело вот в чём :

У меня в программе для определённых изменений в таблицах, предварительно таблицы блокируются . И если другие пользователи в этот момент пытаются чтонить сделать с таблицей . То у них просто всплывает сообщение что , она самая заблокирована темто-темто. И типа надо подождать .
Но возможна такая ситуация,что в работе кода в момент блокировки таблицы, возникает ошибка .
Также возможно, что пользователь эту ошибку не увидел, и не прекратил выполнение программы , т.е. она осталась висеть открытой .
Ничего конечно не было бы страшного, если бы в этот момент его программой не была бы заблокирована какаянить таблица .
А в случае блокировки получается , что пока у него ошибка висит, никто ничего не может с этой таблицей сделать

Для решения таких проблеммных ситуаций использую ON ERROR .
Т.е. перехватываю обработчик, и первым делом в своей процедуре обработки ошибки разблокирую все заблокированные этим юзером таблицы, после этого по идее, виси ошибка хоть целый день, никому она не мешает .

Вроде всё логично, и проблемм не должно быть . Но не тут то было
Недавно столкнулся с такой фишкой, что бывают такие ошибки , каторые ON ERROR не перехватывает
Т.е. вылолняется не моя процедура обработки ошибки, а простое фоксовое сообщение , для примера :
---------------------------------
Ошибка программы
---------------------------------
"Недопустимая рекурсия при вычичлении правила"
---------------------------------
Т.е. в этом случае таблицы не разблокируются, и выполнение всех программ останавливается до тех пор пока пользователь ручками не закроет это окно .

Теперь сам вопрос:
Что это за такие особенные ошибки, не перехватываемые ON ERROR ?
И можно ли, их всётки както обуздать ?

PS VFP 8, Windows XP



Отредактировано (10.02.05 17:53)


------------------
Ratings: 0 negative/0 positive
Re: Обработчик ошибок
Saratoga

Сообщений: 494
Дата регистрации: 02.02.2004
А зачем ты блокируешь всю таблицу? Блокировал бы одну запись rlock().
Ratings: 0 negative/0 positive
Re: Обработчик ошибок
melnik

Сообщений: 289
Откуда: г. Владимир
Дата регистрации: 10.04.2003
Приветствую !

2Saratoga
Спасибо за ответ .
У меня одна процедура блокировки для всех случаев .
Т.е. здесь может быть и прямое изменение одной записи (REPLACE), в этом случае , как вы правильно сказали, более оптимально было бы блокировать одну запись.
Но такая ситуация скорее исключение, чем правило . В основном в таблице меняется не одна запись, а набор записей по условию, или удаляются/добавляются записи .
Т.е. вариант с блокировкой отдельных записей не проходит
Меня больше интересует не вопрос оптимизации алгоритма блокировок , а именно проблема с обработчиком ошибок, описанной мной выше .
Ratings: 0 negative/0 positive
Re: Обработчик ошибок
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Может не обработчиком ошибок в таком случае пользоваться а пытаться блокировать записи руками и тут уже принимать решения если блокировка не прошла ?



2000 пост однака http://piva.fatal.ru/smile/50.gif



Отредактировано (11.02.05 09:42)


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Обработчик ошибок
PaulWist

Сообщений: 14625
Дата регистрации: 01.04.2004
Вадим.

Что-то есть в вопросе, помниться эксперименты с FLASH показали, что ошибка фоксом вообще никакая не возвращается, только ОС говорила про потерю коннекта.

Вот пример когда не обрабатывается ни ON ERROR, ни правило поля

CREATE CURSOR test (id i CHECK CheckId(id) ERROR 'Recursion')
ON ERROR a=errorMes()
INSERT INTO test (id) VALUES (1)
ON ERROR
FUNCTION CheckId
LPARAMETERS ii
RETURN CheckId(ii)
endfun
FUNCTION errorMes
wait window 'ON ERROR'
endfun

похоже, что ошибка квази компиляции (интерпритации) на стадии выполнения не перехватываются.




------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Обработчик ошибок
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Паша, вопрос конечно интересный, но как ты думаешь как может выполнится обработчик ошибок, когда достигли глубины вложенности вызова процедур - куда еще дальше обрабатывать, раздвинуть глубину вложенности ?
http://piva.fatal.ru/smile/62.gif




------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Обработчик ошибок
PaulWist

Сообщений: 14625
Дата регистрации: 01.04.2004
Цитата:
но как ты думаешь как может выполнится обработчик ошибок, когда достигли глубины вложенности вызова процедур

Конечно же понятно, что это выход за ограничение среды и править надо сам код и не пинять на ON ERROR, просто сам факт что пользовательский ON ERROR не главный (вроде как в самой процедуре мы ошибок не сделали), а происходит его переопределение на фоксовский, немного не соответствует хелпу, либо что-то мы не знаем и есть некий приоритет в обработке пользовательского и системного Error.

Вообщем , пишите без ошибок (благое пожелание)




------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Обработчик ошибок
melnik

Сообщений: 289
Откуда: г. Владимир
Дата регистрации: 10.04.2003
Всез приветствую !
И Всем огромное спасибо за ответы ............
Только вот проблему так и не решили
Ну ладно, с переполнением рекурсий я понял , остаётся только более глубоко анализировать код на возможность возникновения подобных ситуаций.
И предотвращать их на этапе разработки . Что конечно более правильно, изночально
Но у меня вопрос . Такие ошибки ( не перехватываемые ON ERROR) могут быть связанны только с превышением вложенности процедур/функций ?
Иль существуют ещё какийнить моменты, при которых можно ждать подобное поведение программы ?
Ratings: 0 negative/0 positive
Re: Обработчик ошибок
PaulWist

Сообщений: 14625
Дата регистрации: 01.04.2004
Про FLASH, уже написал, есть ошибки так назывемого смешанного характера, зависящие от всего комплекса ПО и вычленить сам фокс не в состоянии , например ошибка 5115 Write failed, а что конкретно отвалилось , сам понимаешь надо разбираться.

Цитата:
Иль существуют ещё какийнить моменты, при которых можно ждать подобное поведение программы ?

По этому поводу у Леса Пинтера есть замечательная фраза в вольгом переводе: "Ошибок не существует в принципе, а есть ситуации для которых программист не предусмотрел проверки"




------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Обработчик ошибок
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi, melnik!

Ручная блокировка - зло.
Блокировка ВСЕЙ таблицы - многократное зло.
Невыверенный код (неограниченные рекурсии, fuzzy logic и т.п.) выполняющийся
при заблокированных таблицах - зло.
Теперь думай, ЧТО нужно изменить в логике программы, чтобы всего этого зла
избежать

P.S. Я уж молчу про тупики, классическую ситуацию возникающую при
блокировках одновременно нескольких "ресурсов" (таблиц или записей -
неважно).

P.P.S. Конечно же есть ситуации, когда ручные (в т.ч. "табличные")
блокировки нужны, но таких ситуаций настолько немного, что даже как-то не
охота про них говорить... И конечно изменение "группы записей" о общем
случае ещё не повод накладывать табличную блокировку.




------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 18 (Гостей: 18)

© 2000-2024 Fox Club 
Яндекс.Метрика