Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
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
При выполнении запроса когда есть хотя бы одна запись, ошибки нет, но если запрос не нашел ни одной записи - получаю ошибку. Вопрос, правильно ли это? В моем понимании ошибка должна быть при выполнении запроса и сервер вернул ошибку, а не когда результат ноль записей.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
А что за ошибка??? По идее, PROP:SQL и не знает что там ты делаешь, записи смотришь или обновляешь. Ошибку дает драйвер, если это ошибка. 0 обновленных записей - не могут быть ошибкой! Может синтаксис строки update формируется неверный?
это вообще как?
'UPDATE invoice SET status_out = 1 WHERE oper_id IN(311,312) AND fdelete=0 AND inv_root=12345;
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) , при любом варианте возвращает ответ, нет записей или есть измененные записи.
Последний раз редактировалось gopstop2007 14 Июнь 2022, 11:35, всего редактировалось 1 раз.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Дед Пахом писал(а): ↑14 Июнь 2022, 10:54
В чём проблема писать в лог ERRORCODE(), ERROR(), FILEERROR(), FILEERRORCODE()?
До Вашего ответа, проверял разницу в проверке ERROCODE() vs FILEERRORCODE()
При FILEERRORCODE() не появляется ошибка при результате ноль записей.
Поставил пока FILEERRORCODE(), проверю в работе.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
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() и поймите, что происходит. Может у вас банально таблица не открыта или ....
gopstop2007 писал(а): ↑14 Июнь 2022, 8:14
При выполнении запроса когда есть хотя бы одна запись, ошибки нет, но если запрос не нашел ни одной записи - получаю ошибку.
Дед Пахом писал(а): ↑14 Июнь 2022, 19:24
Как насчёт этого:
gopstop2007 писал(а): ↑14 Июнь 2022, 8:14
При выполнении запроса когда есть хотя бы одна запись, ошибки нет, но если запрос не нашел ни одной записи - получаю ошибку.
Дело в том, что ERRORCODE() возвращает не просто "Есть ошибка"/"Нет ошибки", а код ошибки, которых порядка 90 штук, и каждый означает конкретную причину.
тоже отлично работает. В кларионе - если есть значение (в переменной или в коде ошибке, число или строка - не важно) - то это TRUE, если 0 (ноль) или пустая строка - то FALSE.