powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Обработка ошибок ODBC
8 сообщений из 8, страница 1 из 1
Обработка ошибок ODBC
    #32725737
Молодой Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую, уважаемые.
Рабоаю из VFP 8 с Oracle 9.2 через ODBC. Вопрос в следующем, в проге есть код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
ON ERROR DO pr_ErrorDetail
SQLSETPROP( 0 , "DispWarnings", .T.)
SQLSETPROP( 0 , "DispLogin",  3 )
nHandle=SQLCONNECT("ORA_SERV1","MyUser","BadPass")
? SYS( 2018 )
IF nHandle< 0 
   MESSAGEBOX("Нет Связи с Oracle",  64 ,  0 , "Внимание")
ENDIF

PROCEDURE pr_ErrorDetail
   = AERROR(aErrorArray) 
   MESSAGEBOX("Ошибка",  64 ,  0 , "Внимание")
   ? 'Ошибка имеет следующие параметры'
   FOR n =  1  TO  7 
      ? aErrorArray(n)
   ENDFOR
RETURN

В итоге при попытке коннекта команда "? SYS(2018)" выводит "[ORACLE] [ODBC] [ORA] ORA-01017: INVALID USERNAME/PASSWORD; LOGON DENIED", а процедура обработки ошибок pr_ErrorDetail не отрабатывает. В дебугере в нее даже не входит. Как научиь прогу входить в собственный обработчик при ошибке ODBC?
...
Рейтинг: 0 / 0
Обработка ошибок ODBC
    #32726033
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном случае настройка ON ERROR - не нужна. Просто явно запускаешь обработку ошибки

Код: plaintext
1.
2.
3.
4.
nHandle=SQLCONNECT("ORA_SERV1","MyUser","BadPass")
IF nHandle< 0 
   DO pr_ErrorDetail
   MESSAGEBOX("Нет Связи с Oracle",  64 ,  0 , "Внимание")
ENDIF

Дело в том, что FoxPro запоминает последнюю ошибку и сколько бы безошибочных команд не было выполнено после команды с ошибкой, но все-равно, по AERROR() можно получить последнее (по времени) сообщение об ошибке.
...
Рейтинг: 0 / 0
Обработка ошибок ODBC
    #32726161
Молодой Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМВ данном случае настройка ON ERROR - не нужна. Просто явно запускаешь обработку ошибки

Код: plaintext
1.
2.
3.
4.
nHandle=SQLCONNECT("ORA_SERV1","MyUser","BadPass")
IF nHandle< 0 
   DO pr_ErrorDetail
   MESSAGEBOX("Нет Связи с Oracle",  64 ,  0 , "Внимание")
ENDIF


Да, это я сообразил, но когда я думаю о том, что далее в проге будет несколько сотен SQLEXEC-ов и после каждого придется писать IF .... do pr_ErrorDetail, то мне становится нехорошо. Кроме того, при попытке вставки дублирующей записи в уникальное поле, например, вылетает окно сообщения о нарушении целосности. Как его погасить? Дело в том, что эти сообщения выскакивают в неудобном и непонятном для Юзера виде и их хотелось бы заменить...
...
Рейтинг: 0 / 0
Обработка ошибок ODBC
    #32726200
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодой Я ВладимирМВ данном случае настройка ON ERROR - не нужна. Просто явно запускаешь обработку ошибки

Да, это я сообразил, но когда я думаю о том, что далее в проге будет несколько сотен SQLEXEC-ов и после каждого придется писать IF .... do pr_ErrorDetail, то мне становится нехорошо.
А для этого обычно пишут собственные процедуры или методы класса. Команда SQLExec() имеет всего 3 параметра. Вот и передавай в свою процедуру эти 3 параметра, а в самой процедуре добавь обработчика ошибок. Хотя, ведь все-равно надо будет обработать возвращаемое значение: твоей ли функции или SQLExec()...

Молодой ЯКроме того, при попытке вставки дублирующей записи в уникальное поле, например, вылетает окно сообщения о нарушении целосности. Как его погасить? Дело в том, что эти сообщения выскакивают в неудобном и непонятном для Юзера виде и их хотелось бы заменить...
Если речь SQL-сервере к которому ты обращаешся через SQLExec(), то ничего выскакивать не будет. А если о родной базе данных FoxPro, то надо редактировать не сами данные напрямую, а буфер таблиц.

Сброс буфера в исходные таблицы осуществляется по команде TableUpdate() и в этом случае никаких сообщений об ошибках не возникает. Просто TableUpdate() вернет .F. и далее ты уже анализируешь по AERROR() в чем причина ошибки и выдаешь пользователям отредактированную версию.
...
Рейтинг: 0 / 0
Обработка ошибок ODBC
    #32726247
Молодой Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМЕсли речь SQL-сервере к которому ты обращаешся через SQLExec(), то ничего выскакивать не будет. А если о родной базе данных FoxPro, то надо редактировать не сами данные напрямую, а буфер таблиц.
Нет, я работаю с Oracle 9.2. И сообщение выскакивает: "Connectivity error: [Oracle][ODBC][Ora]ORA-01017: invalid username/password; logon denied", а в Title этого сообщения "MicroSoft Visual FoxPro". Вот я и думаю, что эту месягу вызывает? Как ее погасить/заменить? И только после этой месяги появляется моя "Нет связи с Oracle".
...
Рейтинг: 0 / 0
Обработка ошибок ODBC
    #32726344
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это потому, что ты сделал настройку прямо противоположную тому, что нужно:

Вместо

SQLSETPROP(0, "DispWarnings", .T.)

Сделай

SQLSETPROP(0, "DispWarnings", .F.)

После подавления сообщения об ошибке таким образом SQLExec() просто вернет -1, а разбор полетов по AERROR()
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Обработка ошибок ODBC
    #34096354
Фотография FM32YO aka KID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дабы не плодить лишних тем....

делаю из фокса на Оракл
Код: plaintext
SELECT... FOR UPDATE OF.....
то есть сознательно лочу определенную запись....
Для проверки на другой машине пытаюсь ту же запись открыть - ясно, что открыть ее мне не дает, пока не закоммичу
Код: plaintext
SELECT... FOR UPDATE OF.....
на первой машине

ВОПРОС - как отследить фоксом эту залоченность???
Ведь если запись залочена - 2-я машина как бы "висит" - ждет...

ИМХО надо
Код: plaintext
SQLPSETROP(nHandle, "Querytimeout",  2 )
- задать, но что-то не получается.....

Извините за элементарный вопрос.....
...
Рейтинг: 0 / 0
Обработка ошибок ODBC
    #34096710
FM32YO......
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос снят......
Все делает сам оракл

Код: plaintext
SELECT ...FOR UPDATE... NOWAIT
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Обработка ошибок ODBC
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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