Автор | Сообщение |
|
| Администратор
|
Пост N: 1668
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.10.10 15:17. Заголовок: Как перехватить data width error
делаю так: #include "error.ch" func main Local bErr dbCreate('tt', {{'NN', 'N', 2, 0}}) use tt new bErr := ErrorBlock({|oE| if(oE:GenCode==EG_DATAWIDTH, 0, Break(oE))}) begin sequence dbAppend() Field->NN := 999 recover end ErrorBlock(bErr) retu nil Выскакивает unrecoverable error 9001, причем в обоих харборах Я что-то делаю не так, или это глюк, который надо фиксить ?
|
|
|
Ответов - 14
[только новые]
|
|
|
| Администратор
|
Пост N: 1669
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.10.10 15:32. Заголовок: Кстати, если в xHarb..
Кстати, если в xHarbour использовать try/catch, то ошибка перехватывается. А в Harbour try/catch нет, и begin sequence глючит
|
|
|
|
| постоянный участник
|
Пост N: 1570
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.10.10 19:03. Заголовок: А я всегда мучился с..
А я всегда мучился с такой ошибкой ! Так и не придумал как от нее избавиться.
|
|
|
|
| постоянный участник
|
Пост N: 971
Зарегистрирован: 09.10.06
|
|
Отправлено: 13.10.10 21:12. Заголовок: Выскакивает unrecove..
цитата: | Выскакивает unrecoverable error 9001, причем в обоих харборах |
| Точно так же, как и Clipper цитата: | А в Harbour try/catch нет, и begin sequence глючит |
| В Harbour это будет выглядеть как .. begin sequence with bErr ..
|
|
|
|
| Администратор
|
Пост N: 1670
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.10.10 21:36. Заголовок: До меня уже дошло, к..
До меня уже дошло, как надо делать bErr := ErrorBlock({|oE| if(oE:GenCode==EG_DATAWIDTH, .F., Break(oE))}) .F. - чтобы пропустить присваивание, которое вызвало переполнение
|
|
|
|
| постоянный участник
|
Пост N: 972
Зарегистрирован: 09.10.06
|
|
Отправлено: 13.10.10 23:27. Заголовок: цитата: А в Harbour..
цитата: | цитата: А в Harbour try/catch нет, и begin sequence глючит В Harbour это будет выглядеть как .. begin sequence with bErr .. |
| Эмуляция try/catch в Harbour #include "error.ch" func main Local oErr dbCreate('tt', {{'NN', 'N', 2, 0}}) use tt new begin sequence with {|e| Break(e) } dbAppend() Field->NN := 999 recover using oErr ? oErr:description //.... end retu nil Обращаю внимание, что вызывать ErrorBlock(..)при использовании begin sequence with не нужно Pasha пишет: цитата: | bErr := ErrorBlock({|oE| if(oE:GenCode==EG_DATAWIDTH, .F., Break(oE))}) |
| Pasha, зачем вам нужен вызов Break(oE), если вы recover using не используете?
|
|
|
|
| Администратор
|
Пост N: 1672
Зарегистрирован: 23.05.05
|
|
Отправлено: 14.10.10 20:06. Заголовок: Да мне никаких дейст..
Да мне никаких действий по recover делать не надо. Надо игнорировать эту ошибку.
|
|
|
|
| |
Пост N: 1
Зарегистрирован: 13.10.10
|
|
Отправлено: 14.10.10 21:25. Заголовок: А если возникнет оши..
А если возникнет ошибка не data_width_error и об этом будет умолчено? долго будете искать концы. надо всегда перехватывать только интересующие ошибки, а остальные пусть крашат программу.
|
|
|
|
| |
Пост N: 160
Зарегистрирован: 12.11.06
|
|
Отправлено: 15.10.10 10:48. Заголовок: Господа! Данную ошиб..
Господа! Данную ошибку и способы исправления активно обсуждал в "своих" темах... Ларчик открывается элементарно: dbCreate('tt', {{'NN', 'N', 2, 0}}) // Создали структуру use tt new // Открыли таблицу // А перейти на неё ЗАБЫЛИ, а (x)Harbour Ваши хотелки не понимает, в отличии от Клиппер. Нужно добавить SELE TT // И далее по тексту begin sequence with {|e| Break(e) } dbAppend()
|
|
|
|
| |
Пост N: 62
Зарегистрирован: 11.06.10
|
|
Отправлено: 15.10.10 11:40. Заголовок: Вот проверил на харб..
Вот проверил на харборе: func main() dbCreate('uu', {{'NN', 'N', 2, 0}}) // Создали структуру use uu new ?"alias=",alias() // возвращает UU dbCreate('tt', {{'NN', 'N', 2, 0}}) // Создали структуру use tt new // Открыли таблицу ?"alias=",alias() // возвращает TT return nil AndreyZh пишет: цитата: | // А перейти на неё ЗАБЫЛИ, а (x)Harbour Ваши хотелки не понимает, в отличии от Клиппер. Нужно добавить |
| Про какие хотелки Вы говорите?
|
|
|
|
| |
Пост N: 161
Зарегистрирован: 12.11.06
|
|
Отправлено: 15.10.10 12:08. Заголовок: Про какие хотелки Вы..
цитата: | Про какие хотелки Вы говорите? |
| dbCreate('uu', {{'NN', 'N', 2, 0}}) // Создали структуру use uu new ?"alias=",alias() // возвращает UU Что бы наверняка породить ошибку попробуйте после use uu new создать индекс или открыть таблицу с индексом и сделать SEEK? Лично мне из-за этого пришлось слишком много перепахивать в программе... Хотя часть операций/функций с таблицей не порождает ошибок.
|
|
|
|
| |
Пост N: 63
Зарегистрирован: 11.06.10
|
|
Отправлено: 15.10.10 12:22. Заголовок: Пример: func main()..
Пример: func main() dbCreate('uu', {{'NN', 'N', 2, 0}}) // Создали структуру use uu new index on NN to uu ?"dbSeek(22)=",dbSeek(22) ?"alias=",alias() ?"ordBagName=",ordBagName() ?"indexord=",indexord() dbCreate('tt', {{'NN', 'N', 2, 0}}) // Создали структуру use tt new // Открыли таблицу index on NN to tt ?"dbSeek(99)=",dbSeek(99) ?"alias=",alias() ?"ordBagName=",ordBagName() ?"indexord=",indexord() return nil Результат: dbSeek(22)= .F. alias= UU ordBagName= uu indexord= 1 dbSeek(99)= .F. alias= TT ordBagName= tt indexord= 1
|
|
|
|
|
| |
Пост N: 64
Зарегистрирован: 11.06.10
|
|
Отправлено: 15.10.10 12:31. Заголовок: И еще такой пример: ..
И еще такой пример: func main() dbCreate('uu', {{'NN', 'N', 2, 0}}) // Создали структуру use uu new index on NN to uu ?"dbSeek(22)=",dbSeek(22) ?"alias=",alias() ?"ordBagName=",ordBagName() ?"indexord=",indexord() dbCreate('tt', {{'NN', 'N', 2, 0}}) // Создали структуру use tt new // Открыли таблицу index on NN to tt ?"dbSeek(99)=",dbSeek(99) ?"alias=",alias() ?"ordBagName=",ordBagName() ?"indexord=",indexord() dbcloseall() use uu ?"alias=",alias() use tt new // Открыли таблицу //index on NN to tt set index to tt ?"dbSeek(99)=",dbSeek(99) ?"alias=",alias() ?"ordBagName=",ordBagName() ?"indexord=",indexord() return nil Результат: dbSeek(22)= .F. alias= UU ordBagName= uu indexord= 1 dbSeek(99)= .F. alias= TT ordBagName= tt indexord= 1 alias= UU dbSeek(99)= .F. alias= TT ordBagName= tt indexord= 1 Или дайте свой пример где вылазит ошибка.
|
|
|
|
| |
Пост N: 162
Зарегистрирован: 12.11.06
|
|
Отправлено: 15.10.10 13:00. Заголовок: AlexMyr пишет: Или ..
|
|
|
|
| постоянный участник
|
Пост N: 178
Зарегистрирован: 13.10.05
|
|
Отправлено: 15.10.10 19:58. Заголовок: use uu ?"alia..
цитата: | use uu ?"alias=",alias() use tt new // Открыли таблицу |
| Я всегда пишу перед окрытием Select 0
|
|
|
|