Страница 1 из 2

PROP:SQL обработать ERRORCODE

Добавлено: 14 Июнь 2022, 8:14
gopstop2007
Столкнулся с ситуацией

Код: Выделить всё

invoice{PROP:SQL} = 'UPDATE invoice SET status_out = 1 WHERE oper_id IN(311,312) AND fdelete=0 AND inv_root=12345;
IF ERRORCODE()
       invoice{PROP:SQL} = 'ROLLBACK;'
END                 
При выполнении запроса когда есть хотя бы одна запись, ошибки нет, но если запрос не нашел ни одной записи - получаю ошибку. Вопрос, правильно ли это? В моем понимании ошибка должна быть при выполнении запроса и сервер вернул ошибку, а не когда результат ноль записей.

PROP:SQL обработать ERRORCODE

Добавлено: 14 Июнь 2022, 10:21
ingasoftplus
А что за ошибка??? По идее, PROP:SQL и не знает что там ты делаешь, записи смотришь или обновляешь. Ошибку дает драйвер, если это ошибка. 0 обновленных записей - не могут быть ошибкой! Может синтаксис строки update формируется неверный?

это вообще как?
'UPDATE invoice SET status_out = 1 WHERE oper_id IN(311,312) AND fdelete=0 AND inv_root=12345;
где закрывающий ' ???

PROP:SQL обработать ERRORCODE

Добавлено: 14 Июнь 2022, 10:54
Дед Пахом
В чём проблема писать в лог ERRORCODE(), ERROR(), FILEERROR(), FILEERRORCODE()?

PROP:SQL обработать ERRORCODE

Добавлено: 14 Июнь 2022, 11:29
gopstop2007
ingasoftplus писал(а): 14 Июнь 2022, 10:21 А что за ошибка??? По идее, PROP:SQL и не знает что там ты делаешь, записи смотришь или обновляешь. Ошибку дает драйвер, если это ошибка. 0 обновленных записей - не могут быть ошибкой! Может синтаксис строки update формируется неверный?

это вообще как?
'UPDATE invoice SET status_out = 1 WHERE oper_id IN(311,312) AND fdelete=0 AND inv_root=12345;
где закрывающий ' ???
Насчет '`', он есь просто ошибся при копировании кода. Этот запрос работает без ошибок прямо на сервере (проверял с помощью Navicat) , при любом варианте возвращает ответ, нет записей или есть измененные записи.

PROP:SQL обработать ERRORCODE

Добавлено: 14 Июнь 2022, 11:33
gopstop2007
Дед Пахом писал(а): 14 Июнь 2022, 10:54 В чём проблема писать в лог ERRORCODE(), ERROR(), FILEERROR(), FILEERRORCODE()?
До Вашего ответа, проверял разницу в проверке ERROCODE() vs FILEERRORCODE()
При FILEERRORCODE() не появляется ошибка при результате ноль записей.
Поставил пока FILEERRORCODE(), проверю в работе.

PROP:SQL обработать ERRORCODE

Добавлено: 14 Июнь 2022, 11:42
Дед Пахом
Так какая ошибка-то?

PROP:SQL обработать ERRORCODE

Добавлено: 14 Июнь 2022, 13:44
ingasoftplus
The FILEERRORCODE procedure returns a string containing the code number for the "native" error message from the file system (file driver) being used to access a data file. Valid only when ERRORCODE() = 90 or ERRORCODE() = 47.
так что, у вас не File Driver Error или Invalid Record Declaration

ну а что - сделайте полный ERRORCODE(), ERROR(), FILEERROR(), FILEERRORCODE() и поймите, что происходит. Может у вас банально таблица не открыта или ....

PROP:SQL обработать ERRORCODE

Добавлено: 14 Июнь 2022, 19:15
gopstop2007
Дед Пахом писал(а): 14 Июнь 2022, 11:42 Так какая ошибка-то?
ERRORCODE - возращает 0 (ноль)
FILEERRORCODE() - ничего не возвращает.

PROP:SQL обработать ERRORCODE

Добавлено: 14 Июнь 2022, 19:24
Дед Пахом
Как насчёт этого:
gopstop2007 писал(а): 14 Июнь 2022, 8:14 При выполнении запроса когда есть хотя бы одна запись, ошибки нет, но если запрос не нашел ни одной записи - получаю ошибку.

PROP:SQL обработать ERRORCODE

Добавлено: 14 Июнь 2022, 20:12
gopstop2007
Дед Пахом писал(а): 14 Июнь 2022, 19:24 Как насчёт этого:
gopstop2007 писал(а): 14 Июнь 2022, 8:14 При выполнении запроса когда есть хотя бы одна запись, ошибки нет, но если запрос не нашел ни одной записи - получаю ошибку.
Сам в шоке, показывать

Код: Выделить всё

IF ERRORCODE() > 0 вместо IF ERRORCODE()

PROP:SQL обработать ERRORCODE

Добавлено: 14 Июнь 2022, 20:29
Дед Пахом
Дело в том, что ERRORCODE() возвращает не просто "Есть ошибка"/"Нет ошибки", а код ошибки, которых порядка 90 штук, и каждый означает конкретную причину.

PROP:SQL обработать ERRORCODE

Добавлено: 15 Июнь 2022, 10:10
ingasoftplus
так и

Код: Выделить всё

IF ERRORCODE()
тоже отлично работает. В кларионе - если есть значение (в переменной или в коде ошибке, число или строка - не важно) - то это TRUE, если 0 (ноль) или пустая строка - то FALSE.

PROP:SQL обработать ERRORCODE

Добавлено: 15 Июнь 2022, 11:08
Дед Пахом
ingasoftplus писал(а): 15 Июнь 2022, 10:10 тоже отлично работает.
MESSAGE(ERRORCODE()) тоже отлично работает, только вот почему-то @gopstop2007 об этом не знает.

PROP:SQL обработать ERRORCODE

Добавлено: 15 Июнь 2022, 12:37
ingasoftplus
Дед Пахом писал(а): 15 Июнь 2022, 11:08 только вот почему-то @gopstop2007 об этом не знает.
не все сразу!!! Теперь - знает :idied:

PROP:SQL обработать ERRORCODE

Добавлено: 15 Июнь 2022, 16:27
gopstop2007
ingasoftplus писал(а): 15 Июнь 2022, 12:37
Дед Пахом писал(а): 15 Июнь 2022, 11:08 только вот почему-то @gopstop2007 об этом не знает.
не все сразу!!! Теперь - знает :idied:
Внимательнее посмотрите на мой первый пост.