Тема / Topic: Как в TraceMode получить сообщение об ошибке при SQL запросе?
Ave Oleg
Active Forum Member / Активный участник форума
Участник № / Member № 6246
отправлено / posted
Здравствуйте. Создана таблица в БД с 1 столбцом BarCode с индексом Primary, чтобы устранить запись дубликата. Как можно получить сообщение об ошибке (#1062 – Duplicate entry ’??′ for key ‘PRIMARY’) в TraceMode, если запись в БД не произошла и выдать сообщение, что найден дубликат?
Сообщения / Posts 87 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Ave Oleg
Active Forum Member / Активный участник форума
Участник № / Member № 6246
отправлено / posted
Делаю выводы, что как-то нужно использовать переменную @Message через генерацию сообщений.
Сообщения / Posts 87 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Недостоверность каналу CALL.SQL выставляется только в том случае, когда ODBC-драйвер вернет сообщение об отсутствии возможности принять и передать SOL-запрос, т.е. по ошибкам сугубо интерфейсного характера. О результатах разбора запроса и выполнении самого запроса в БД интерфейс ODBC-драйвера не сообщает. Если недостоверность выставлена, то можно сформировать соответствующее сообщение и на экране, и в ОТ (в том числе и через переменную @Message.
Сообщения / Posts 17353 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Ave Oleg
Active Forum Member / Активный участник форума
Участник № / Member № 6246
отправлено / posted
Для проверки, делаю запись данных в таблицу напрямую через программу управления данными HeidiSQL. При выявлении дубликата выходит ошибка (#1062 – Duplicate entry ’??′ for key ‘PRIMARY’) Хорошо здесь работает. Но при запросе от TraceMode сообщение об ошибке нигде не появляется. Не отсылается ли ошибка назад в TraceMode? Если возможно да, то как можно применить переменную @Message?
Нашел в справке DEC-коды ошибок, диагностируемых МРВ (для CALL.SQL) - ERR_RT_WRITE (ошибка записи). Или все же это ошибка интерфейсного характера?
Сообщения / Posts 87 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Если ODBC-драйвер возвращает Trace Mode 6 сообщение об ошибке, оно должно быть зафиксировано в атрибуте 92, I2. При этом каналу выставляется признак недостоверности (атрибут 4). При получении признака недостоверности можно программно сгенерировать нужное Вам сообщение для записи. например, в ОТ. Или индицировать эту ситуацию на экране.
Сообщения / Posts 17353 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Ave Oleg
Active Forum Member / Активный участник форума
Участник № / Member № 6246
отправлено / posted
Не совсем ясно "...Или индицировать эту ситуацию на экране..." ? Сделал следующее, но не знаю как быть дальше? Создал аргумент экрана с привязкой к тексту. Привязал этот аргумент к базе данных по атрибуту 92,I2. В свойствах базы данных установил атрибут 4 Достоверность.
Сообщения / Posts 87 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
ГЭ "Текст" надо привязать к атрибуту 4 канала CALL.SQL. В свойстве "Текст" выбрать, например, ВИД_ИНДИКАЦИИ = "Arg=Конст" и настроить вывод текстового сообщения в зависимости от того, равно ли 0 значение этого атрибута. Можно использовать не "Текст", а какой-либо из цветовых атрибутов этого ГЭ.
Если атрибут 92,I2 действительно возвращает некий код ошибки, можно построить аналогичную индикацию, которая будет определяться значениями возвращаемых кодов ошибки. При том можно воспользоваться видом индикации, например, "Набор{Arg = Конст}".
Сообщения / Posts 17353 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Ave Oleg
Active Forum Member / Активный участник форума
Участник № / Member № 6246
отправлено / posted
Не ясно. Аргумент текста на экране привязали к атрибуту канала CALL.SQL 4)Достоверность. А что нужно делать с атрибутом 92,I2?
Сообщения / Posts 87 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Если ODBC-драйвер возвращает ненулевой код ошибки, он будет отображен в атрибуте 92,I2. Вы можете затем расшифровать его по описанию кодов ошибок из документации на установленный драйвер ODBC. Далее можно поступать с этой информацией по своему усмотрению: либо выводить этот код на экран или (программно) в Отчет тревог, либо, как было предложено выше, настроить индикацию на экране (текстовую или цветовую) по известным Вам расшифровкам кодов ошибок, возвращаемых драйвером ODBC.
Сообщения / Posts 17353 | Из / From: Россия
| IP / IP: IP адрес / IP address |