|
|
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
Леди и джентельмены! Всех с 1 сентября (хотя бы потому, что все мы были когда-то школьниками)! У меня c месяц назад на форуме был топик "Защита от дураков срабатывает - зачем только ее писала?". Ссылка для тех, кто заинтересуется, что за ерунду я там спрашивала: http://]http://sql.ru/forum/actualthread.aspx?tid=209171 Там мне было сделано замечание, что я использую в кодах не RETURN, а CANCEL. Я согласилась, что поступаю не совсем правильно. А теперь опять засомневалась. Пример: В форме используеся таблица из БД с установленными триггерами. Кнопка "Удалить". В клике у нее прописываю: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. Так вот. Если прописано RETURN, то в коде клика после сообщения об ошибке успешно выполняется REPLACE и все, что прописано за ним. Получается ерунда. А поставила CANCEL - работает как надо. Что же правомерно прописывать в данном случае? Благодарю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 10:32:50 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
TO Лисонька Вообще Return ставится в конце кода, и срабатывает правильно после того когда все циклы завершились. А Cancel своего рода екстренное прерывания всего что за ним и прекращение выполнения данного кода. Но можно в Return-e указывать на процедуру в которой ты можешь прописать прерывание и закрытие кода "RETURN TO ProcedureName" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 10:55:09 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
Лисонька, а ты REPLACE в тригер перенеси. И будет тебе счастие ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 11:07:12 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
Или оберни модификацию таблицы в Try ... Catch ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 11:08:43 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
Maltsev MaxЛисонька, а ты REPLACE в тригер перенеси Да, я нашла в хранимые в БД процедуры, отыскала процедуру триггера удаления на таблицу Пункт, поменяла строки после ON ERROR на свой код, но ничего не заработало - удаление спокойно проходит в любом случае. Нужно разбираться как следует и неспеша. Или оберни модификацию таблицы в Try ... Catch М-да-а, вот об этом я впервые слышу. В топиках хэлпа этих слов не нашла, а по поиску вышло нечто расплывчатое. Нельзя ли поподробнее, где отыскать описание try и catch. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 14:08:51 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
Короче, я прописала процедурный файл, внесла в процедуру часть кода Click с REPLAСE и далее поставила RETURN TO MASTER. Вот так вроде бы работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 14:58:20 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
Что-то здесь опять с логикой не то. Что именно по Вашему должно произойти, если при выполнении какой-то команды произошла ошибка? Ну, вот в приведенном примере: Код: plaintext 1. Вы почему-то предполагаете, что выполнение кода должно остановиться на ошибочной команде и после обработки события Error() уже не выполняться. Почему собственно? В FoxPro этого не происходит. Поэтому подобные команды, как правило, окружают дополительными проверками Код: plaintext 1. 2. 3. Это общая схема. Как именно выполняется отлов ошибки - это уже другой разговор. Он тесно завязан на схему работы с данными. То, как было произведено удаление в данном случае - это крайне редко используемая ситуация. Обычно все-таки работают с буфером, а не напрямую с таблицей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 19:02:24 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
ВладимирМЧто-то здесь опять с логикой не то. Уважаемый Учитель! Ну тогда я уже вообще ничего не понимаю. Программа начала работать так, как мне представлялось. В Click кнопки "Удалить": Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Если это вне логики, то почему работает? Благодарю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 19:45:18 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
автор PROCEDURE DelПункт nAnswer = MESSAGEBOX("ВНИМАНИЕ! Вы собираетесь УДАЛИТЬ этот населенный пункт. Пожалуйста, подумайте еще раз, прежде, чем нажать клавишу ДА.", 4+48,"Удаление населенного пункта" ) DO CASE CASE nAnswer = 6 DELETE IN пункт REPLACE пункт WITH ALLTRIM(STR(пункт.КодПункт,6,0)) IN пункт ENDCASE ENDPROC Я думаю надо написать так MESSAGEBOX("ВНИМАНИЕ! Вы собираетесь УДАЛИТЬ этот населенный пункт. Пожалуйста, подумайте еще раз, потом откиньтесь на спинку стула и опять подумайте, сходите покурить-опять подумайте, короче думайте и думайте, а ваще лучше админа позвать", 4+48,"Удаление населенного пункта" ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 20:38:52 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
[quot Доброжелательный мессагер[/quot] Я думаю надо написать так MESSAGEBOX("ВНИМАНИЕ! Вы собираетесь УДАЛИТЬ этот населенный пункт. Пожалуйста, подумайте еще раз, потом откиньтесь на спинку стула и опять подумайте, сходите покурить-опять подумайте, короче думайте и думайте, а ваще лучше админа позвать", 4+48,"Удаление населенного пункта" )[/quot] Главный прикольщик в детском саду? Здесь форум, а не чат Кроватка. Либо админа часто зовешь на помощь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 21:11:26 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
Доброжелательный мессагерЯ думаю надо написать так MESSAGEBOX("ВНИМАНИЕ! Вы собираетесь УДАЛИТЬ этот населенный пункт. Пожалуйста, подумайте еще раз, потом откиньтесь на спинку стула и опять подумайте, сходите покурить-опять подумайте, короче думайте и думайте, а ваще лучше админа позвать", 4+48,"Удаление населенного пункта" ) Главный прикольщик в детском саду? Здесь форум, а не чат Кроватка. Либо админа часто зовешь на помощь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 21:13:03 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
Доброжелательный мессагер Я думаю надо написать так Я думаю, что не перевелись еще балбесы на земле русской. Не лопни от смеха, мальчик! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 21:14:51 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
2 Лисонька Если делать по уму, то прав ВладимирМ - сначала проверить возможность удаления а потом уже делать все дальнейшие операции. Потом анализировать код будет проще. Но если тебе хочется придерживатся своей схемы то просто заведи признак ошибки и включай его в своей процедуры обработки ошибок. Чтото вроде: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 21:54:35 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
Burn Сначала проверить возможность удаления а потом уже делать все дальнейшие операции. Потом анализировать код будет проще. Но если тебе хочется придерживатся своей схемы то просто заведи признак ошибки и включай его в своей процедуры обработки ошибок. Благодарю. Вот этого - IF not m.error - я не знала. Эта команда значительно облегчает задачу. Но всетаки 2 вопроса: 1. Так ли ужасен и не по уму написан мой собственный код? 2. Так где же мне посмотреть про try и catch? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 22:17:56 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
Да ладно, че вы все такие важные, даже пошутить нельзя, понимаешь... Про Try дак можно хелп почитать, а если не судьба, то на тебе перевод (специально сам переводил чтоб грехи замалить перед вами :-))) TRY...CATCH...FINALLY Command fox.orient-time.ru Команда TRY...CATCH...FINALLY См. Также Commands | Exception Class | UserValue Property | VARTYPE( ) Function | ErrorNo Property | ERROR( ) Function | MESSAGE( ) Function | AERROR( ) Function | SYS(2018) - Error Message Parameter Структура для обработки ошибок и исключений, которые могут произойти при выполнении блока кода. Подробности о структурной обработке ошибок приведены в документе Structured Error Handling. TRY [ tryCommands ] [ CATCH [ TO VarName ] [ WHEN lExpression ] [ catchCommands ] ] [ THROW [ eUserExpression ] ] [ EXIT ] [ FINALLY [ finallyCommands ] ] ENDTRY Параметры TRY Указывает начало структуры TRY...CATCH...FINALLY. tryCommands Расположение инструкций, в которых, на взгляд разработчика, могла бы произойти ошибка. При происхождении ошибки, Visual FoxPro сохраняет ссылку на объект Exception в переменной VarName в предложении TO VarName. Выполнение программы переходит к инструкциям CATCH. Если ошибка не происходит, выполнение программы переходит к блоку FINALLY. CATCH Указывает начало блока CATCH, который обрабатывает соответствующую ошибку. Вы можете использовать инструкцию CATCH без параметров. В этом случае инструкция будет оценена как соответствующая Истине, и будет выполнен код, размещенный в этой конструкции. В случае, если ошибка произойдет в методе объекта, в коде, обрамленном блоком TRY, и выполнение кода вызовет исключение, будет вызвана соответствующая инструкция CATCH. Если метод, вызванный из блока TRY, вызывает ошибку, она будет обработана методом Error этого метода. Это поведение обусловлено тем, что другой метод, который был вызван непосредственно, может и не содержать структуру TRY...CATCH...FINALLY. Следующий пример иллюстрирует это поведение: x=NEWOBJECT("myClass") x.myMethod() DEFINE CLASS myClass AS Session OLEPUBLIC PROCEDURE myMethod myMethod3() && обрабатывает ошибку метод Error. TRY THIS.myMethod2() myMethod3() && обрабатывает ошибку конструкция CATCH. CATCH TO oErr ? "Catch:",oErr.ErrorNo FINALLY ENDTRY ENDPROC PROCEDURE myMethod2 x=y && Переменной y не существует. Заработает метод Error. ENDPROC PROCEDURE Error(nError, cMethod, nLine) ? "Error:",nError ENDPROC ENDDEFINE PROCEDURE myMethod3 x = y ENDPROC TO VarName Определяет содержимое дополнительной переменной памяти, в которой сохраняется ссылка на объект Exception, который создается автоматически при происхождении ошибки в блоке TRY. VarName должна быть простой переменной. Она не может быть объектной ссылкой или свойством. Вы можете явно присвоить переменной VarName любое значение в структуре TRY...CATCH...FINALLY. Значение не изменится, пока не заработает другая инструкция CATCH, которая присвоит VarName значение NULL. VarName может иметь локальную (local), глобальную (public), или частную (private) область видимости. Это зависит от того, как предварительно была объявлена переменная. Если VarName не была предварительно объявлена, она имеет частную область видимости. Созданный объект Exception имеет ту же самую область, что и переменная VarName. Когда переменная VarName выйдет из области видимости, объект Exception также будет освобожден из памяти. Когда выполняется предложение CATCH TO VarName, Visual FoxPro передает ссылке VarName указатель на новый объект Exception, независимо от его предыдущей установки, хотя VarName сохраняет его область видимости. Содержание VarName всегда записывается поверх, независимо от того, на что ранее ссылалось предварительное значение переменной. Если существует предложение WHEN, и оно равно .F., Visual FoxPro освобождает объект Exception из памяти и присваивает переменной VarName значение NULL. Вы можете проверять установки переменной VarName , используя функцию VARTYPE (). WHEN lExpression Определяет дополнительное выражение, которое будет обработано в случае, если программа сталкивается с инструкцией CATCH. Для дальнейшей работы, для перехода к catchCommands, выражение должно быть равно Истине (.T).. Параметр lExpression может содержать ссылку на VarName объекта Exception. Соответственно, с ее помощью, Вы можете запросить данные об ошибке для ее соответствующей обработки. catchCommands Здесь помещается код инструкции CATCH. THROW [ eUserExpression ] Создает новый объект Exception, который будет передан инструкции CATCH. Параметр eUserExpression определяет выражение любого типа и определяет значение свойства UserValue объекта Exception. Обычно, предложение THROW в блоке CATCH,используется для передачи ошибки или исключения в вышестоящий обработчик ошибки. Вы можете передавать объект любого типа, так как свойство UserValue объекта Exception может хранить только объектную ссылку. Когда Вы используете предложение THROW с eUserExpression, Visual FoxPro присваивает свойству ErrorNo объекта Exception значение 2071, которое соответствует ошибке «User Thrown Error (Ошибка 2071)». Если Вы опускаете eUserExpression, Visual FoxPro ищет ранее определенный объект Exception, если он существует, иначе, Visual FoxPro передает новый объект Exception со значением свойства ErrorNo равным 2071. Примечание Вы должны стараться использовать параметр eUserExpression, который будет определять значение свойства UserValue объекта Exception, так как он позволит Вам использовать цепь объектов Exception. Для получения дополнительной информации о последовательных объектах Exception, см. раздел Example. Если Вы не включаете eUserExpression, и предложение THROW передает объект Exception внешнему блоку TRY...CATCH, внешним блоком TRY...CATCH будет захвачен тот же самый объект Exception. Значения, возвращаемые функциями ERROR(), MESSAGE( ), и AERROR () не всегда могут быть достоверными, при использовании их в структурном обработчике исключений. Вместо них, Вы должны использовать объект Exception. Вы можете вызвать THROW из любого блока кода в структуре TRY...CATCH...FINALLY. Вы не можете вызвать THROW от окна Command. Вы можете использовать THROW только в том коде, в котором существует обработчик ошибки для захвата исключения. Предупреждение Вызов команды THROW вне структуры TRY...CATCH...FINALLY и без соответствующего обработчика ошибки заставит среду прервать выполнение вашей программы. Если при вызове THROW из блока CATCH или FINALLY присутствует внешняя инструкция TRY...CATCH, Visual FoxPro передает переменной VarName, находящейся в предложении CATCH TO, объектную ссылку на объект Exception (который был сгенерирован переброшенным исключением). Если внешней инструкции TRY...CATCH нет, Visual FoxPro передает исключение в обработчик, назначенный ON ERROR или в метод ERROR, если они существуют; иначе, Visual FoxPro вызывает системный обработчик ошибки. Замечание Передача инструкции THROW во внешнюю структуру TRY...CATCH...FINALLY, в выполняющемся приложении (Runtime applications), должна быть соответствующим образом выполнена (обернута). Если Вы желаете повторно передать первоначальное (оригинальное) исключение, которое было захвачено предложением CATCH TO VarName, Вы можете вызвать THROW VarName. Обратите внимание. Передачу первоначального исключения производит другой новый объект Exception, во внешней инструкции CATCH (которая имеет свойство UserValue, содержащее объектную ссылку на первоначальное исключение). Visual FoxPro игнорирует любые инструкции THROW, появляющиеся в предложении CATCH WHEN eExpression. Если THROW сталкивается с ошибкой при оценке выражения, Visual FoxPro передает ошибку обычным способом. EXIT Используется в TRY, CATCH, FINALLY для немедленного выхода из блока кода. Если EXIT стоит в блоке TRY или CATCH, управление переходит к инструкции FINALLY, если она существует. Если EXIT стоит в блоке FINALLY или если FINALLY не существует, управление переходит к инструкции, следующей за ENDTRY. FINALLY Указывает начало блока FINALLY, который обычно используется для очистки любых ресурсов, задействованных блоком TRY, и который всегда будет выполнен кроме случаев использования команд CANCEL и QUIT. Для получения дополнительной информации о командах, которые могут быть использованы в структуре TRY...CATCH...FINALLY, см. Structured Error Handling. finallyCommands Расположение инструкций кода в блоке FINALLY, которые будет выполнены, после того, как в блоке TRY не будет обнаружено никаких ошибок или будут выполнены инструкции в блоке CATCH. ENDTRY Указывает конец структуры TRY...CATCH...FINALLY. Каждая структура TRY...CATCH...FINALLY должна закончиться ключевым словом ENDTRY. Как и в других управляющих инструкциях Visual FoxPro, Вы можете использовать комментарии, предваренные двойным амперсандом (&&) после слова ENDTRY. Если Вы забудете включить инструкцию ENDTRY в конец структуры TRY...CATCH...FINALLY, Visual FoxPro сгенерирует ошибку при компиляции вашего кода и этот блок не сможет работать в дальнейшем. Замечания Исключения, которые происходят в обработчиках исключений TRY...CATCH...FINALLY, устанавливают команду SET CONSOLE в значение ON. Для получения дополнительной информации, см. SET CONSOLE Command. Вы не можете явно передавать выполнение программы конструкциям CATCH или FINALLY. Visual FoxPro устанавливает область видимости переменных как в процедурах. То есть переменные, объявленные в блоке TRY, видимы в блоке FINALLY в пределах той же самой структуры TRY...CATCH...FINALLY. Однако, переменные во вложенной структуре, которые объявлены в блоках TRY, CATCH, или FINALLY, имеют локальную область видимости (local). Вы не должны инициализировать переменные или использовать критически важный код в блоке TRY, потому что этот код может не заработать. Если ошибка происходит в специфической строке программы в блоке TRY, все последующие строки в блоке TRY не будут выполнены. Любые ошибки, которые происходят в объекте при возникновении события Error, должны быть обработаны объектом, и не должны передаваться в подпрограмму ON ERROR или обработчику TRY...CATCH...FINALLY. Однако, для перехвата ошибки при возникновении события Error, Вы можете использовать структуру TRY...CATCH...FINALLY. Для получения дополнительной информации, см. Error Event. Использование функции COMRETURNERROR () в блоке CATCH заканчивает всю дальнейшую обработку ошибок, и управление возвращается непосредственно клиенту Component Object Model (COM). Так что блок FINALLY не будет выполнен. Для получения дополнительной информации, см. COMRETURNERROR( ) Function. Избегайте использовать команду SET TEXTMERGE TO MEMVAR в структуре TRY...CATCH...FINALLY, потому что, если в этой инструкции произойдет ошибка, переменная памяти будет потеряна. Вы можете использовать SYS (2410), функцию Error Handler в вашем коде TRY...CATCH...FINALLY, чтобы определить направление действий, например, используя структуру DO CASE, в зависимости от типа обработчика, который обрабатывает исключение. Для получения дополнительной информации, см. SYS(2410) - Error Handler. Вы можете использовать TRY...CATCH...FINALLY для обработки тех ошибок, которые происходят в меню и событиях таймера и в командах типа ON KEY LABEL, если структура должным образом обернута. Следующий пример иллюстрирует, как команда READ EVENTS сохраняет управление программой в пределах структуры TRY...CATCH...FINALLY для захвата события меню. Захват ошибки управляется позицией TRY...CATCH...FINALLY в стеке вызовов. TRY DO myMenu.mpr DO FORM myForm myForm.AddObject("tm1","mytimer") READ EVENTS CATCH TO oException IF oException.ErrorNo = 1 ENDIF FINALLY CLEAR EVENTS ENDTRY Для получения дополнительной информации, см. READ EVENTS Command и ON KEY LABEL Command. Visual FoxPro поддерживает функцию отладки Set Next Statement только в пределах отдельного блока кода. Например, при выполнении кода в блоке TRY, Вы можете использовать Set Next Statement только применительно к другой строке в пределах блока TRY. Вы не можете перейти к другой строке программы в блоке CATCH или FINALLY. Для получения дополнительной информации, см.Debugger Keyboard Shortcuts and Menus. Visual FoxPro генерирует соответствующие сообщения при следующих условиях: Несоответствие или внутренняя ошибка структуры TRY...CATCH...FINALLY. Возникает не обрабатывающееся исключение. В блоке TRY, CATCH, или FINALLY появляется недопустимая команда. Для получения дополнительной информации, см. Structured Error Handling. Если пользователь передал ошибку. Пример Следующий пример иллюстрирует, как вложить инструкции TRY...CATCH, использовать предложение THROW, и обработать объект Exception. LOCAL x AS Integer, y AS Integer, result AS Integer LOCAL oErr AS Exception, oErr1 AS Exception TRY x = 1 TRY USE nothing GO TOP y = nothing.col1 CATCH TO oErr oErr.UserValue = "Сообщение вложенного CATCH: Не могу обработать" ?[: Вложенный Catch! (Не могу обработать передачу объекта oErr наверх)] ?[ Внутренний Объект Исключения: ] ?[ Error: ] + STR(oErr.ErrorNo) ?[ LineNo: ] + STR(oErr.LineNo) ?[ Message: ] + oErr.Message ?[ Procedure: ] + oErr.Procedure ?[ Details: ] + oErr.Details ?[ StackLevel: ] + STR(oErr.StackLevel) ?[ LineContents: ] + oErr.LineContents ?[ UserValue: ] + oErr.UserValue THROW oErr FINALLY ?[: Выполняется вложенный FINALLY] IF USED("nothing") USE IN nothing ENDIF ENDTRY result = x-y CATCH TO oErr1 ?[: Внешний CATCH! ] ?[ Внешний объект Exception: ] ?[ Error: ] + STR(oErr1.ErrorNo) ?[ LineNo: ] + STR(oErr1.LineNo) ?[ Message: ] + oErr1.Message ?[ Procedure: ] + oErr1.Procedure ?[ Details: ] + oErr1.Details ?[ StackLevel: ] + STR(oErr1.StackLevel) ?[ LineContents: ] + oErr1.LineContents ?[ ->UserValue становится внутренним исключением THROWn во вложенном TRY/CATCH ] ?[ Error: ] + STR(oErr1.UserValue.ErrorNo) ?[ Message: ] + oErr1.UserValue.Message ?[ Procedure: ] + oErr1.UserValue.Procedure ?[ Details: ] + oErr1.UserValue.Details ?[ StackLevel: ] + STR(oErr1.UserValue.StackLevel) ?[ LineContents: ] + oErr1.UserValue.LineContents ?[ UserValue: ] + oErr1.UserValue.UserValue result = 0 FINALLY ?[: Инструкция FINALLY выполнилась ] ENDTRY RETURN result Следующий пример показывает, как Вы могли бы работать с цепочкой объектов Exception: TRY TRY x=y && Переменная Y не существует и потому вызывает ошибку. CATCH TO oException2 THROW CREATEOBJECT("myException") ENDTRY CATCH TO oException1 ENDTRY ? 2, oException2.ErrorNo, oException2.UserValue ? 1, oException1.ErrorNo, oException1.UserValue.UserValue DEFINE CLASS myException AS Exception UserValue = "Мой персональный обработчик ошибки" PROCEDURE Init STRTOFILE("Ошибка произошла в: " + TRANSFORM(DATETIME()); + CHR(13),"c:\errs.log",.T.) ENDPROC ENDDEFINE См. Также Commands | Exception Class | UserValue Property | VARTYPE( ) Function | ErrorNo Property | ERROR( ) Function | MESSAGE( ) Function | AERROR( ) Function | SYS(2018) - Error Message Parameter -------------------------------------------------------------------------------- Send feedback on this topic to Microsoft For technical support and product issues, see the "Microsoft Visual FoxPro Technical Support" topic.. © 1992 - 2003 Microsoft Corporation. All rights reserved. fox.orient-time.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2005, 10:06:15 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
Лисонька Если это вне логики, то почему работает? Благодарю. А ты смотри что именно происходит, по твоей логике: -) DELETE - здесь произошла ошибка -) FoxPro переходит к событию, которое должно обрабатывать ошибки. В данном случае - это Error Event этой же кнопки. -) Если событие Error заканчивается простой командой RETURN, то выполнение кода возвращается в ту процедуру, где произошла ошибка и переходит на следующую команду -) Если в событии Error дается команда RETURN TO MASTER, то это означает возврат не в ту процедуру, где дана команда DELETE, а в главный стартовый файл проекта . Т.е. не просто прекращается действие процедуры, где дана команда DELETE, но напрочь "обрубается" вся дальнейшая обработка! Во всей цепочке вложенных процедур, последняя из которых и вызвала ошибку. Если у тебя только одна процедура (в данном случае - событие Click), то можно и так. Но, в общем случае, если у тебя была целая цепочка вызываемых друг из друга процедур, то это не есть хорошо. Ну, простейшая ситуация - главная и подчиненные таблицы. Удаляешь запись из главной, а внутри этой процедуры запускаешь процесс удаление из подчиненной. Во вложенной процедуре ошибка. По твоей логике ты уже не возвращяешся в процедуру удаления записи в главной таблицы. Просто прекращяешь работу процедуры удаления! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2005, 18:04:16 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
авторПро Try дак можно хелп почитать, а если не судьба, то на тебе перевод Благодарю. Только вот просила я просто указать, где искать топик по этим командам, потому что простой поиск этих слов к желанному результату не приводит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2005, 22:42:52 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
ВладимирМНапрочь "обрубается" вся дальнейшая обработка! Во всей цепочке вложенных процедур, последняя из которых и вызвала ошибку. Если у тебя только одна процедура (в данном случае - событие Click), то можно и так. Но, в общем случае, если у тебя была целая цепочка вызываемых друг из друга процедур, то это не есть хорошо. Теперь согласна с Вашими доводами, Учитель. Эту форму обкатываю вне самого проекта, вставлю в проект потом. А наверно зря так поступаю. Благодарю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2005, 22:46:02 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
2Лисонька >1. Так ли ужасен и не по уму написан мой собственный код? Он не ужасаен. Просто подобные конструкции очень затрудняют последующий анализ кода при соправождении программы - так как прейдется перелопатить кучу текста, чтобы прнять где имено изменятся значение переменой. Поэтому если есть возможность избежать таких конструкций то лучше избегать:) >2. Так где же мне посмотреть про try и catch? Я пас - для меня базовая VFP6. Там этого еще нет;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2005, 23:25:25 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
BurnЯ пас - для меня базовая VFP6. Там этого еще нет;) Так этого и в 8 Фоксе я не нашла. Леди и джентельмены! Откуда прислан переведенный топик? Разъясните, пожалуйста, что это за "серетный" код у Фокса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2005, 09:42:38 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
Приветствую Лисонька Вы уже на меня не обижаетесь , да??? :-))))) По существу Оператор Try введен именно в 8 версии, плохо искали, и в хелп там все описано этот перевод про try бездарно слизан отдуда http://fox.orient-time.ru/index.htm там есть компилированный файл справки скачай Вообще есть фоксклуб тоже хорошая вещь, в поиске набери Try и узнаешь много интересного Есть на фоксклубе такая хорошая штука как Offforum все ответы ты найдешь там и в инете не надо будет спрашивать, потому что все вопросы идут по кругу В оффлайн форуме есть и поиск и избранное и прочая Посиди скачай и будет тебе счастье ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2005, 11:19:37 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
ЛисонькаТак этого и в 8 Фоксе я не нашла. Лисонька Либо Вы неправильно пишите синтаксис этих команд либо смотрите не 8 VFP. Бывает, когда запаришься ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2005, 13:55:30 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
Мадам, советую Вам сменить работу. Думаю, что в другой области у Вас получится лучьше. Парадаксальный тупеж - это что-то новое на канале VFP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2005, 17:51:35 |
|
||
|
Опять про RETURN и CANCEL - что лучше?
|
|||
|---|---|---|---|
|
#18+
М-мд-я-я... Где же пресловутый Борман (он же в бытность свою просто Бендер)? Вот когда он смог бы оторваться по полной программе в "Половом вопросе" на счет женщин. Действительно, на рабочем столе рядышком иконки 7 и 8 Фокса. В 7-то я и искала TRY и CATH. Благодарю. P.S. авторМадам, советую Вам сменить работу. Думаю, что в другой области у Вас получится лучьше. Парадаксальный тупеж - это что-то новое на канале VFP. Хотя заместо Бормана сойдет и Luser. Уважаемый Luser (не знаю, чего вы подразумевали под своим ником: loser - проигравший, нестоящая вещь, дрянь, неудачник; или Вы любитель Люсь?). Так вот, у-ый Luser, парадоксальный тупеж у Вас в области русского языка, это точно. Мой совет Вам: ЛЧЬШЕ УЖЬ САВСЕМ НИПИШИТЕ Ф ФОРУМ, А ТО ХТО НИБУДЬ ДА ПОДУМАЕТ ШТО Luser ХОТЬ И СИЛЕН В ФОКСЕ, НО В ОСТАЛЬНОМ СЛАБ И НЕСОСТАЯТЕЛЕН ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2005, 21:01:16 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33247200&tid=1593559]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
205ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
95ms |
get tp. blocked users: |
2ms |
| others: | 254ms |
| total: | 609ms |

| 0 / 0 |
