powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Обработка ошибок ввода занчений в DW
13 сообщений из 13, страница 1 из 1
Обработка ошибок ввода занчений в DW
    #32883696
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется функция
Код: 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
Обработка ошибок ввода занчений в DW
    #32883847
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, плиз, как отловить номер ошибки в запросе?
Код: 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
Обработка ошибок ввода занчений в DW
    #32883895
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильнее будет:
Код: plaintext
1.
2.
3.
IF SQLCA.SQLCode <>  0  THEN 
    // Бла, бла, бла...
END IF
...
Рейтинг: 0 / 0
Обработка ошибок ввода занчений в DW
    #32883964
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Black SavageПравильнее будет:
Код: plaintext
1.
2.
3.
IF SQLCA.SQLCode <>  0  THEN 
    // Бла, бла, бла...
END IF

Не важно. Все равно SQLCode всегда равен 0.
...
Рейтинг: 0 / 0
Обработка ошибок ввода занчений в DW
    #32884015
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините, а на мой вопрос есть какие нибудь варианты?
...
Рейтинг: 0 / 0
Обработка ошибок ввода занчений в DW
    #32885261
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Обработка ошибок ввода занчений в DW
    #32885976
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Обработка ошибок ввода занчений в DW
    #32887640
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99
2 DIGITALPRO. Вероятно, следует определить язык, на котором приходят сообщения и соответствующим образом обработать. Вы это хотели услышать?
А тогда еще не подскажите как его определить?
...
Рейтинг: 0 / 0
Обработка ошибок ввода занчений в DW
    #32888963
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DIGITALPRO PL99
2 DIGITALPRO. Вероятно, следует определить язык, на котором приходят сообщения и соответствующим образом обработать. Вы это хотели услышать?
А тогда еще не подскажите как его определить?
смотри NLS_LANG для Oracle БД
...
Рейтинг: 0 / 0
Обработка ошибок ввода занчений в DW
    #32889291
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Обработка ошибок ввода занчений в DW
    #32889326
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Обработка ошибок ввода занчений в DW
    #32890266
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если не хочешь читать из регистров то может это поможет:

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

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

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


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