Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите обработать ошибку.
|
|||
|---|---|---|---|
|
#18+
В процедуре (myProc(), допустим) идет запись в свободную таблицу. В этой таблице есть поле RecDate d. Помогите сделать так, чтобы при возникновении любой ошибки в теле процедуры происходило удаление всех записей у кот. RecDate = date() (т.е. удаление всех записей за сегодняшний день), и немедленный выход из процедуры с выдачей сообщения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 15:34 |
|
||
|
Помогите обработать ошибку.
|
|||
|---|---|---|---|
|
#18+
А фокс какой ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 16:30 |
|
||
|
Помогите обработать ошибку.
|
|||
|---|---|---|---|
|
#18+
Странное желание, однако. Ну если тебе это надо, напиши в начале процедуры myProc() On Error Delete For RecDate = date() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 16:57 |
|
||
|
Помогите обработать ошибку.
|
|||
|---|---|---|---|
|
#18+
On Error Delete For RecDate = date() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 08:43 |
|
||
|
Помогите обработать ошибку.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext Спасибо. Но, как я понимаю, после того как будет обработана ошибка по On Error управление перейдет к следующей строке стоящей следом за строкой в кот. произошла ошибка. А как сделать, чтобы еще и происходил немедленный выход из процедуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 08:48 |
|
||
|
Помогите обработать ошибку.
|
|||
|---|---|---|---|
|
#18+
>А как сделать, чтобы еще и происходил немедленный выход из процедуры? Вместо On Error Delete For RecDate = date() Поставь On Error DO MyError Где в процедуре MyError удалишь все записи и перейдешь в процедуру более высокого уровня, что то вроде: PROCEDURE MyError ON ERROR Delete For RecDate = date() RETURN TO <процедура вызвашшая ту, в которой произошла ошибка> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 10:00 |
|
||
|
Помогите обработать ошибку.
|
|||
|---|---|---|---|
|
#18+
Очень похоже, что Вам надо использовать буферизацию таблиц - откат можно сделать по всем записям, введенным после последнего сохранения... Мне кажется это будет проще... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 10:55 |
|
||
|
Помогите обработать ошибку.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext Я думал, что это приминимо только к таблицам БД, а не к свободным таблицам? Все равно мне очень интересно, так как никогда этим не пользовался. Можно на примере. Допустим, в процедуре MyProc() идет запись в таблицу: procedure MyProc() use tb1 alias mytb1 in 0 use tb2 alias mytb2 in 0 select mytb1 scan if запись удовлетворяет условию insert into mytb2; values(...) ... ** Допустим, в этом месте на какой-то записи происходит ошибка endscan endproc Конечно, все это очень упрощенно но все таки. Так как мне использовать эту буферизацию с этим откатом? Т.е. если можно рассмотреть 2 варианта: 1) Если произошла ошибка, то все ранее добавленные записи не должны были б добавляться? 2)Если произошла ошибка, то все ранее добавленные записи остаются, кроме последней, той на которой произошла ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 11:21 |
|
||
|
Помогите обработать ошибку.
|
|||
|---|---|---|---|
|
#18+
>Я думал, что это приминимо только к таблицам БД, а не к свободным таблицам? К любым Для вашего примера: procedure MyProc() use tb1 alias mytb1 in 0 use tb2 alias mytb2 in 0 SET MULTILOCKS ON =CURSORSETPROP('Buffering',5, 'mytb2') &&оптимистическая буфферизация таблицы select mytb1 ON ERROR DO MyError scan if запись удовлетворяет условию insert into mytb2; values(...) ... * Допустим, в этом месте на какой-то записи происходит ошибка endscan IF .not.TABLEUPDATE(.t., .t., 'mytb2') * ошибка сброса в буфер =TABLEREVERT(.t., 'mytb2') ENDIF endproc PROCEDURE MyError ON ERROR IF <условия удаления всего> =TABLEREVERT(.t., 'mytb2') ELSE SELECT mytb2 DELETE IF .not.TABLEUPDATE(.t., .t., 'mytb2') * ошибка сброса в буфер =TABLEREVERT(.t., 'mytb2') ENDIF ENDIF RETURN TO MAIN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 15:02 |
|
||
|
Помогите обработать ошибку.
|
|||
|---|---|---|---|
|
#18+
Уважаемый Burn объясните, если не сложно, зачем этот кусок кода используется два раза, в каждой процедуре? (особо не пойму зачем в MyError) Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 15:37 |
|
||
|
Помогите обработать ошибку.
|
|||
|---|---|---|---|
|
#18+
to AlexFV так все-таки, что тебе надо 1)удалить ВСЕ записи, созданные ЗА сегодняшний ДЕНЬ, или 2)только записи, которые были созданы ЗА ВРЕМЯ данного вызова MyProc() ? Если 1 вар., то буферизация тебе не поможет. используй то, что предложил Burn в первый раз: PROCEDURE MyError ON ERROR Delete For RecDate = date() RETURN TO <процедура вызвашшая ту, в которой произошла ошибка> Если 2 вар., то поясню за Burn'a , зачем IF .not.TABLEUPDATE(.t., .t., 'mytb2') используется в MyError() : Ведь, при возникновении ошибки в MyProc() происходит "немедленный выход из процедуры" и значит IF .not.TABLEUPDATE(.t., .t., 'mytb2') находящийся в конце MyProc() не отработает. Поэтому помещаем его еще раз в самой MyError() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 16:31 |
|
||
|
Помогите обработать ошибку.
|
|||
|---|---|---|---|
|
#18+
Спасибо, все понятно. А насчет: Код: plaintext 1. 2. 3. 4. 5. Дело в том, что MyProc() больше одного раза в день не может выполняться. Еще раз, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 16:37 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32490296&tid=1596749]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
54ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 258ms |
| total: | 387ms |

| 0 / 0 |
