On-line: tnsr2, гостей 0. Всего: 1 [подробнее..]
АвторСообщение
Администратор




Пост 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, причем в обоих харборах
Я что-то делаю не так, или это глюк, который надо фиксить ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 14 [только новые]


Администратор




Пост N: 1669
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 13.10.10 15:32. Заголовок: Кстати, если в xHarb..


Кстати, если в xHarbour использовать try/catch, то ошибка перехватывается.
А в Harbour try/catch нет, и begin sequence глючит

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1570
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.10.10 19:03. Заголовок: А я всегда мучился с..


А я всегда мучился с такой ошибкой !
Так и не придумал как от нее избавиться.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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
..

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1670
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 13.10.10 21:36. Заголовок: До меня уже дошло, к..


До меня уже дошло, как надо делать

bErr := ErrorBlock({|oE| if(oE:GenCode==EG_DATAWIDTH, .F., Break(oE))})

.F. - чтобы пропустить присваивание, которое вызвало переполнение


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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 не используете?


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1672
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 14.10.10 20:06. Заголовок: Да мне никаких дейст..


Да мне никаких действий по recover делать не надо. Надо игнорировать эту ошибку.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 1
Зарегистрирован: 13.10.10
ссылка на сообщение  Отправлено: 14.10.10 21:25. Заголовок: А если возникнет оши..


А если возникнет ошибка не data_width_error и об этом будет умолчено?
долго будете искать концы. надо всегда перехватывать только интересующие ошибки, а остальные пусть крашат программу.


Спасибо: 0 
ПрофильЦитата Ответить





Пост 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()


Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 Ваши хотелки не понимает, в отличии от Клиппер. Нужно добавить


Про какие хотелки Вы говорите?

Спасибо: 0 
ПрофильЦитата Ответить





Пост 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? Лично мне из-за этого пришлось слишком много перепахивать в программе... Хотя часть операций/функций с таблицей не порождает ошибок.


Спасибо: 0 
ПрофильЦитата Ответить



Пост 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

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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

Или дайте свой пример где вылазит ошибка.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 162
Зарегистрирован: 12.11.06
ссылка на сообщение  Отправлено: 15.10.10 13:00. Заголовок: AlexMyr пишет: Или ..


AlexMyr пишет:

 цитата:
Или дайте свой пример где вылазит ошибка



Уважаемый AlexMyr! При всём желании НЕ БУДУ ломать переписанной огромным трудом с ловлей многочисленных "особенностей" xHarbour ПО! Допускаю, что разработчики уже устранили некоторые проблемы и у Вас свежая сборка. Если интересно, то в темах http://clipper.borda.ru/?1-3-0-00000137-000-0-0-1277829057<\/u><\/a> и http://clipper.borda.ru/?1-4-60-00000527-000-0-0-1270323717<\/u><\/a> уважаемое сообщество помогало мне в нахождении "клопов" и их исправлении, в том числе по ошибке 9001.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 178
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 15.10.10 19:58. Заголовок: use uu ?"alia..



 цитата:

use uu
?"alias=",alias()
use tt new // Открыли таблицу


Я всегда пишу перед окрытием
Select 0

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 201
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет