Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Обработка ошибок ввода занчений в DW / 13 сообщений из 13, страница 1 из 1
26.01.2005, 09:14
    #32883696
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок ввода занчений в DW
Имеется функция
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
String ls_cln_name
Integer li_pos1, li_pos2

choose case li_dberr
	case -  85 
		MessageBox('Ошибка','...'+ls_sqlerrtext + String(li_dberr))
	case -  209  // check
		li_pos1 = pos(ls_sqlerrtext,'Constraint') +  11 
		li_pos2 = pos(ls_sqlerrtext,'violated') -  3 
		ls_cln_name = trim(left(ls_sqlerrtext, li_pos2))
		ls_cln_name = trim(right(ls_cln_name,li_pos2 - li_pos1 ))
		MessageBox('Ошибка','...'+l_dw.describe( ls_cln_name + '_t.text')+'".')
	case -  121  
		if pos(ls_sqlerrtext,'select') >  0  then ls_cln_name = 'Просмотр'
		if pos(ls_sqlerrtext,'insert') >  0  then ls_cln_name = 'Добавление'
		if pos(ls_sqlerrtext,'update') >  0  then ls_cln_name = 'Изменение'
		if pos(ls_sqlerrtext,'delete') >  0  then ls_cln_name = 'Удаление'
		if pos(ls_sqlerrtext,'execute') >  0  then ls_cln_name = 'Выполнение'
		MessageBox('Ошибка','...'+ ls_cln_name)
....
....
....
....
	case -  20000 
		li_pos1 = pos(ls_sqlerrtext,':') +  2  
		ls_cln_name = Right(ls_sqlerrtext,len(ls_sqlerrtext) - li_pos1)
		MessageBox('Ошибка', ls_cln_name)
	case else
		MessageBox('Ошибка','...'+ls_sqlerrtext+' sqldbcode ' + String(li_dberr))
end choose
Все прекрасно работает

Но взял я и выполнил dblang.exe ru
и естесвенно часть моих сообщений (там где обрезается sqlerrtext) перестали нести какую либо информацию.

Вопрос или дайте совет, как поступить лучьше
1. просто не переключатся на ru
2. пробывал в начале процедуры сделать run('dblang.exe en - q') а в конце run('dblang.exe ru - q'), не помогло
3. Может я вообще все не правильно делаю?
4. Другие предложения

===============================
PB 9.0.2 (7534) ASA 9.0.2 (2451)
...
Рейтинг: 0 / 0
26.01.2005, 10:23
    #32883847
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок ввода занчений в DW
Подскажите, плиз, как отловить номер ошибки в запросе?
Код: plaintext
1.
2.
IF SQLCA.SQLCode = - 1  THEN 
 MessageBox("SQL error", SQLCA.SQLErrText)
END IF
Это не проходит. SQLCA.SQLCode = 0, SQLCA.SQLErrText = ''
PB8, Access, AutoCommit = True, XP(ru)
...
Рейтинг: 0 / 0
26.01.2005, 10:41
    #32883895
Black Savage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок ввода занчений в DW
Правильнее будет:
Код: plaintext
1.
2.
3.
IF SQLCA.SQLCode <>  0  THEN 
    // Бла, бла, бла...
END IF
...
Рейтинг: 0 / 0
26.01.2005, 11:02
    #32883964
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок ввода занчений в DW
Black SavageПравильнее будет:
Код: plaintext
1.
2.
3.
IF SQLCA.SQLCode <>  0  THEN 
    // Бла, бла, бла...
END IF

Не важно. Все равно SQLCode всегда равен 0.
...
Рейтинг: 0 / 0
26.01.2005, 11:16
    #32884015
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок ввода занчений в DW
Извините, а на мой вопрос есть какие нибудь варианты?
...
Рейтинг: 0 / 0
26.01.2005, 16:48
    #32885261
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок ввода занчений в DW
Riska Black SavageПравильнее будет:
Код: plaintext
1.
2.
3.
IF SQLCA.SQLCode <>  0  THEN 
    // Бла, бла, бла...
END IF

Не важно. Все равно SQLCode всегда равен 0.Это говорит вам о том, что ошибки нет - запрос к базе выполнен успешно. А вот если SQLCode <> 0, то, как правильно заметил Black Savage, бла, бла, бла... :-))), в том смысле, что следует обрабатывать SQLDbCode и SQLErrText.

2 DIGITALPRO. Вероятно, следует определить язык, на котором приходят сообщения и соответствующим образом обработать. Вы это хотели услышать?
...
Рейтинг: 0 / 0
27.01.2005, 02:14
    #32885976
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок ввода занчений в DW
Код: plaintext
1.
2.
3.
IF SQLCA.SQLCode <>  0  THEN 
    // Бла, бла, бла...
END IF

Не важно. Все равно SQLCode всегда равен 0.
Это говорит вам о том, что ошибки нет - запрос к базе выполнен успешно. А вот если SQLCode <> 0, то, как правильно заметил Black Savage, бла, бла, бла... :-))), в том смысле, что следует обрабатывать SQLDbCode и SQLErrText.

Если речь идет об ошибках выполнения запроса в DW (см. тему), то ошибку надо обрабатывать в событии dberror, т.к. ф-и retrieve() и update() не меняют состояние объекта transaction, привязанного к DW.
...
Рейтинг: 0 / 0
27.01.2005, 17:00
    #32887640
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок ввода занчений в DW
PL99
2 DIGITALPRO. Вероятно, следует определить язык, на котором приходят сообщения и соответствующим образом обработать. Вы это хотели услышать?
А тогда еще не подскажите как его определить?
...
Рейтинг: 0 / 0
28.01.2005, 12:32
    #32888963
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок ввода занчений в DW
DIGITALPRO PL99
2 DIGITALPRO. Вероятно, следует определить язык, на котором приходят сообщения и соответствующим образом обработать. Вы это хотели услышать?
А тогда еще не подскажите как его определить?
смотри NLS_LANG для Oracle БД
...
Рейтинг: 0 / 0
28.01.2005, 14:02
    #32889291
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок ввода занчений в DW
zuzuсмотри NLS_LANG для Oracle БД DIGITALPROPB 9.0.2 (7534) ASA 9.0.2 (2451)
из приложения можно определить заглянув в registry.
возьмите regMon ( http://www.sysinternals.com/ntw2k/source/regmon.shtml )
запустите свой dblang и посмотрите куда именно он пишет новое значение.

интересно можно ли из хранимки определить язык?
или остается только вызвать ошибку искуственно и сверить message с образцом
...
Рейтинг: 0 / 0
28.01.2005, 14:11
    #32889326
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок ввода занчений в DW
zuzuсмотри NLS_LANG для Oracle БДГм...
DIGITALPROPB 9.0.2 (7534) ASA 9.0.2 (2451)
2DIGITALPRO2Как это сделать в ASA - не знаю, но думаю, что в вашем случае можно программировать в лоб - есть русские буквы в сообщении - обрабатывать, нет - не обрабатывать.

Конкретнее могу рекомендовать следующее - в объекте объявить функцию, которая содержит ваш смысловой кусок
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
//function of_Get121ErrMsg(ls_sqlerrtext) return string
// сообщение об ошибке на англ. языке 
// "Do not have permission to %1"

string ls_cln_name 
if left(ls_sqlerrtext,  2 ) = "Do" then // Английский
 if pos(ls_sqlerrtext,'select') >  0  then ls_cln_name = 'Просмотр'
 if pos(ls_sqlerrtext,'insert') >  0  then ls_cln_name = 'Добавление'
 if pos(ls_sqlerrtext,'update') >  0  then ls_cln_name = 'Изменение'
 if pos(ls_sqlerrtext,'delete') >  0  then ls_cln_name = 'Удаление'
 if pos(ls_sqlerrtext,'execute') >  0  then ls_cln_name = 'Выполнение'
else // Русский
...
end if
return ls_cln_name 
...
Рейтинг: 0 / 0
28.01.2005, 20:16
    #32890266
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок ввода занчений в DW
если не хочешь читать из регистров то может это поможет:

SELECT VALUE FROM NLS_INSTANCE_PARAMETERS WHERE parameter = 'NLS_LANGUAGE'
...
Рейтинг: 0 / 0
28.01.2005, 21:22
    #32890334
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок ввода занчений в DW
ЗоринАндрейинтересно можно ли из хранимки определить язык?
Вообще-то, в ASA язык сообщений зависит от клиента. Клиент при коннекте к ASA в параметре LANG может попросить сервер отдавать все сообщения на указаном языке. Если сервер этот язык знает - удовлетворит, если не знает - будет использовать тот язык который был выбран для системной консоли через утилиту dblang. Если через dblang указали язык для которого нету соотвествующей dll с сообщениями, то будет использован английский.

Посмотреть язык который серевер будет отдавать конкретно этому клиенту в этой сессии можно через SELECT connection_property ( 'Language' ); или просмотреть резалтсет от CALL sa_conn_properties;

ЗоринАндрейили остается только вызвать ошибку искуственно и сверить message с образцом
Ну это уже из пушки по воробьям, но заработает :)
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Обработка ошибок ввода занчений в DW / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]